diff --git a/llvm/test/CodeGen/RISCV/rvv/vadd-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vadd-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vadd-sdnode-rv32.ll +++ /dev/null @@ -1,837 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vadd_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vadd_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv1i8_0( %va) { -; CHECK-LABEL: vadd_vx_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv1i8_1( %va) { -; CHECK-LABEL: vadd_vx_nxv1i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i8 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -; Test constant adds to see if we can optimize them away for scalable vectors. -define @vadd_ii_nxv1i8_1() { -; CHECK-LABEL: vadd_ii_nxv1i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmv.v.i v8, 5 -; CHECK-NEXT: ret - %heada = insertelement undef, i8 2, i32 0 - %splata = shufflevector %heada, undef, zeroinitializer - %headb = insertelement undef, i8 3, i32 0 - %splatb = shufflevector %headb, undef, zeroinitializer - %vc = add %splata, %splatb - ret %vc -} - -define @vadd_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vadd_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv2i8_0( %va) { -; CHECK-LABEL: vadd_vx_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv2i8_1( %va) { -; CHECK-LABEL: vadd_vx_nxv2i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i8 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vadd_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i8_0( %va) { -; CHECK-LABEL: vadd_vx_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i8_1( %va) { -; CHECK-LABEL: vadd_vx_nxv4i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i8 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vadd_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i8_0( %va) { -; CHECK-LABEL: vadd_vx_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i8_1( %va) { -; CHECK-LABEL: vadd_vx_nxv8i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i8 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vadd_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv16i8_0( %va) { -; CHECK-LABEL: vadd_vx_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv16i8_1( %va) { -; CHECK-LABEL: vadd_vx_nxv16i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i8 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vadd_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv32i8_0( %va) { -; CHECK-LABEL: vadd_vx_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv32i8_1( %va) { -; CHECK-LABEL: vadd_vx_nxv32i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i8 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vadd_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv64i8_0( %va) { -; CHECK-LABEL: vadd_vx_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv64i8_1( %va) { -; CHECK-LABEL: vadd_vx_nxv64i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i8 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vadd_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv1i16_0( %va) { -; CHECK-LABEL: vadd_vx_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv1i16_1( %va) { -; CHECK-LABEL: vadd_vx_nxv1i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i16 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vadd_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv2i16_0( %va) { -; CHECK-LABEL: vadd_vx_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv2i16_1( %va) { -; CHECK-LABEL: vadd_vx_nxv2i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i16 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vadd_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i16_0( %va) { -; CHECK-LABEL: vadd_vx_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i16_1( %va) { -; CHECK-LABEL: vadd_vx_nxv4i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i16 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vadd_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i16_0( %va) { -; CHECK-LABEL: vadd_vx_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i16_1( %va) { -; CHECK-LABEL: vadd_vx_nxv8i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i16 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vadd_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv16i16_0( %va) { -; CHECK-LABEL: vadd_vx_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv16i16_1( %va) { -; CHECK-LABEL: vadd_vx_nxv16i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i16 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vadd_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv32i16_0( %va) { -; CHECK-LABEL: vadd_vx_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv32i16_1( %va) { -; CHECK-LABEL: vadd_vx_nxv32i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i16 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vadd_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv1i32_0( %va) { -; CHECK-LABEL: vadd_vx_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv1i32_1( %va) { -; CHECK-LABEL: vadd_vx_nxv1i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i32 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vadd_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv2i32_0( %va) { -; CHECK-LABEL: vadd_vx_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv2i32_1( %va) { -; CHECK-LABEL: vadd_vx_nxv2i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i32 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vadd_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i32_0( %va) { -; CHECK-LABEL: vadd_vx_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i32_1( %va) { -; CHECK-LABEL: vadd_vx_nxv4i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i32 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vadd_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i32_0( %va) { -; CHECK-LABEL: vadd_vx_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i32_1( %va) { -; CHECK-LABEL: vadd_vx_nxv8i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i32 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vadd_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv16i32_0( %va) { -; CHECK-LABEL: vadd_vx_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv16i32_1( %va) { -; CHECK-LABEL: vadd_vx_nxv16i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i32 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vadd_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv1i64_0( %va) { -; CHECK-LABEL: vadd_vx_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv1i64_1( %va) { -; CHECK-LABEL: vadd_vx_nxv1i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vadd_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vadd.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv2i64_0( %va) { -; CHECK-LABEL: vadd_vx_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv2i64_1( %va) { -; CHECK-LABEL: vadd_vx_nxv2i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vadd_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vadd.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i64_0( %va) { -; CHECK-LABEL: vadd_vx_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv4i64_1( %va) { -; CHECK-LABEL: vadd_vx_nxv4i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vadd_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vadd.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i64_0( %va) { -; CHECK-LABEL: vadd_vx_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} - -define @vadd_vx_nxv8i64_1( %va) { -; CHECK-LABEL: vadd_vx_nxv8i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vadd.vi v8, v8, 2 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = add %va, %splat - ret %vc -} diff --git a/llvm/test/CodeGen/RISCV/rvv/vadd-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vadd-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vadd-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vadd-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vadd-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vadd-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vadd_vx_nxv1i8( %va, i8 signext %b) { ; CHECK-LABEL: vadd_vx_nxv1i8: @@ -665,11 +666,24 @@ } define @vadd_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vadd_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vadd_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vadd.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vadd_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vadd.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = add %va, %splat @@ -701,11 +715,24 @@ } define @vadd_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vadd_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vadd_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vadd.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vadd_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vadd.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = add %va, %splat @@ -737,11 +764,24 @@ } define @vadd_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vadd_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vadd_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vadd.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vadd_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vadd.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = add %va, %splat @@ -773,11 +813,24 @@ } define @vadd_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vadd_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vadd.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vadd_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vadd.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vadd_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vadd.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = add %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vand-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vand-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vand-sdnode-rv32.ll +++ /dev/null @@ -1,1329 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vand_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vand_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vand_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i8_1( %va) { -; CHECK-LABEL: vand_vi_nxv1i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i8_2( %va) { -; CHECK-LABEL: vand_vi_nxv1i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vand_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vand_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i8_1( %va) { -; CHECK-LABEL: vand_vi_nxv2i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i8_2( %va) { -; CHECK-LABEL: vand_vi_nxv2i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vand_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vand_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i8_1( %va) { -; CHECK-LABEL: vand_vi_nxv4i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i8_2( %va) { -; CHECK-LABEL: vand_vi_nxv4i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vand_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vand_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i8_1( %va) { -; CHECK-LABEL: vand_vi_nxv8i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i8_2( %va) { -; CHECK-LABEL: vand_vi_nxv8i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vand_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vand_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv16i8_1( %va) { -; CHECK-LABEL: vand_vi_nxv16i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv16i8_2( %va) { -; CHECK-LABEL: vand_vi_nxv16i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vand_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vand_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv32i8_1( %va) { -; CHECK-LABEL: vand_vi_nxv32i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv32i8_2( %va) { -; CHECK-LABEL: vand_vi_nxv32i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vand_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vand_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv64i8_1( %va) { -; CHECK-LABEL: vand_vi_nxv64i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv64i8_2( %va) { -; CHECK-LABEL: vand_vi_nxv64i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vand_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vand_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i16_1( %va) { -; CHECK-LABEL: vand_vi_nxv1i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i16_2( %va) { -; CHECK-LABEL: vand_vi_nxv1i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vand_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vand_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i16_1( %va) { -; CHECK-LABEL: vand_vi_nxv2i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i16_2( %va) { -; CHECK-LABEL: vand_vi_nxv2i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vand_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vand_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i16_1( %va) { -; CHECK-LABEL: vand_vi_nxv4i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i16_2( %va) { -; CHECK-LABEL: vand_vi_nxv4i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vand_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vand_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i16_1( %va) { -; CHECK-LABEL: vand_vi_nxv8i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i16_2( %va) { -; CHECK-LABEL: vand_vi_nxv8i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vand_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vand_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv16i16_1( %va) { -; CHECK-LABEL: vand_vi_nxv16i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv16i16_2( %va) { -; CHECK-LABEL: vand_vi_nxv16i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vand_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vand_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv32i16_1( %va) { -; CHECK-LABEL: vand_vi_nxv32i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv32i16_2( %va) { -; CHECK-LABEL: vand_vi_nxv32i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vand_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vand_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i32_1( %va) { -; CHECK-LABEL: vand_vi_nxv1i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i32 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i32_2( %va) { -; CHECK-LABEL: vand_vi_nxv1i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vand_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vand_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i32_1( %va) { -; CHECK-LABEL: vand_vi_nxv2i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i32 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i32_2( %va) { -; CHECK-LABEL: vand_vi_nxv2i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vand_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vand_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i32_1( %va) { -; CHECK-LABEL: vand_vi_nxv4i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i32 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i32_2( %va) { -; CHECK-LABEL: vand_vi_nxv4i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vand_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vand_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i32_1( %va) { -; CHECK-LABEL: vand_vi_nxv8i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i32 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i32_2( %va) { -; CHECK-LABEL: vand_vi_nxv8i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vand_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vand_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv16i32_1( %va) { -; CHECK-LABEL: vand_vi_nxv16i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i32 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv16i32_2( %va) { -; CHECK-LABEL: vand_vi_nxv16i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vand_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vand_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i64_1( %va) { -; CHECK-LABEL: vand_vi_nxv1i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv1i64_2( %va) { -; CHECK-LABEL: vand_vi_nxv1i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vand_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vand.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vand_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i64_1( %va) { -; CHECK-LABEL: vand_vi_nxv2i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv2i64_2( %va) { -; CHECK-LABEL: vand_vi_nxv2i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vand_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vand.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vand_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i64_1( %va) { -; CHECK-LABEL: vand_vi_nxv4i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv4i64_2( %va) { -; CHECK-LABEL: vand_vi_nxv4i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vand_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vand.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = and %va, %vb - ret %vc -} - -define @vand_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vand_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vand.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vand_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vand.vi v8, v8, -10 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -10, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i64_1( %va) { -; CHECK-LABEL: vand_vi_nxv8i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - -define @vand_vi_nxv8i64_2( %va) { -; CHECK-LABEL: vand_vi_nxv8i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = and %va, %splat - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vand-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vand-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vand-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vand-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vand-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vand-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vand_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vand_vv_nxv1i8: @@ -1074,11 +1075,24 @@ } define @vand_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vand_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vand_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vand.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vand_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vand.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = and %va, %splat @@ -1133,11 +1147,24 @@ } define @vand_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vand_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vand_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vand.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vand_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vand.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = and %va, %splat @@ -1192,11 +1219,24 @@ } define @vand_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vand_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vand_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vand.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vand_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vand.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = and %va, %splat @@ -1251,11 +1291,24 @@ } define @vand_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vand_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vand.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vand_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vand.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vand_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vand.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = and %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv64.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv64.ll +++ /dev/null @@ -1,894 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vdiv_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v8, v9, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v9, v8, 7 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v8, v9, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v9, v8, 7 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v8, v9, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v9, v8, 7 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v8, v9, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v9, v8, 7 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmulh.vx v10, v8, a0 -; CHECK-NEXT: vsub.vv v8, v10, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v10, v8, 7 -; CHECK-NEXT: vadd.vv v8, v8, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmulh.vx v12, v8, a0 -; CHECK-NEXT: vsub.vv v8, v12, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v12, v8, 7 -; CHECK-NEXT: vadd.vv v8, v8, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: vsub.vv v8, v16, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v16, v8, 7 -; CHECK-NEXT: vadd.vv v8, v8, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v9, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v9, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v9, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v10, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v12, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v16, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv1i32( %va, i32 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addiw a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v8, v9, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v9, v8, 31 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv2i32( %va, i32 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addiw a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v8, v9, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v9, v8, 31 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv4i32( %va, i32 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addiw a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmulh.vx v10, v8, a0 -; CHECK-NEXT: vsub.vv v8, v10, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v10, v8, 31 -; CHECK-NEXT: vadd.vv v8, v8, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv8i32( %va, i32 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addiw a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmulh.vx v12, v8, a0 -; CHECK-NEXT: vsub.vv v8, v12, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v12, v8, 31 -; CHECK-NEXT: vadd.vv v8, v8, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv16i32( %va, i32 signext %b) { -; CHECK-LABEL: vdiv_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addiw a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: vsub.vv v8, v16, v8 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vsrl.vi v16, v8, 31 -; CHECK-NEXT: vadd.vv v8, v8, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vdiv_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1029851 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v9, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vdiv_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1029851 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v10, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vadd.vv v8, v8, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vdiv_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1029851 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v12, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vadd.vv v8, v8, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vdiv_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vdiv.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = sdiv %va, %vb - ret %vc -} - -define @vdiv_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vdiv_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vdiv.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - -define @vdiv_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1029851 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v16, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vadd.vv v8, v8, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sdiv %va, %splat - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv32.ll rename to llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vdiv_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vdiv_vv_nxv1i8: @@ -321,16 +322,27 @@ } define @vdiv_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v9, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv1i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, mf4, ta, mu +; RV32-NEXT: vmulh.vx v8, v8, a0 +; RV32-NEXT: vsra.vi v8, v8, 1 +; RV32-NEXT: vsrl.vi v9, v8, 15 +; RV32-NEXT: vadd.vv v8, v8, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv1i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, mf4, ta, mu +; RV64-NEXT: vmulh.vx v8, v8, a0 +; RV64-NEXT: vsra.vi v8, v8, 1 +; RV64-NEXT: vsrl.vi v9, v8, 15 +; RV64-NEXT: vadd.vv v8, v8, v9 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -360,16 +372,27 @@ } define @vdiv_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v9, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv2i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, mf2, ta, mu +; RV32-NEXT: vmulh.vx v8, v8, a0 +; RV32-NEXT: vsra.vi v8, v8, 1 +; RV32-NEXT: vsrl.vi v9, v8, 15 +; RV32-NEXT: vadd.vv v8, v8, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv2i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, mf2, ta, mu +; RV64-NEXT: vmulh.vx v8, v8, a0 +; RV64-NEXT: vsra.vi v8, v8, 1 +; RV64-NEXT: vsrl.vi v9, v8, 15 +; RV64-NEXT: vadd.vv v8, v8, v9 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -399,16 +422,27 @@ } define @vdiv_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v9, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv4i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, m1, ta, mu +; RV32-NEXT: vmulh.vx v8, v8, a0 +; RV32-NEXT: vsra.vi v8, v8, 1 +; RV32-NEXT: vsrl.vi v9, v8, 15 +; RV32-NEXT: vadd.vv v8, v8, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv4i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, m1, ta, mu +; RV64-NEXT: vmulh.vx v8, v8, a0 +; RV64-NEXT: vsra.vi v8, v8, 1 +; RV64-NEXT: vsrl.vi v9, v8, 15 +; RV64-NEXT: vadd.vv v8, v8, v9 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -438,16 +472,27 @@ } define @vdiv_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v10, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v10 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv8i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, m2, ta, mu +; RV32-NEXT: vmulh.vx v8, v8, a0 +; RV32-NEXT: vsra.vi v8, v8, 1 +; RV32-NEXT: vsrl.vi v10, v8, 15 +; RV32-NEXT: vadd.vv v8, v8, v10 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv8i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, m2, ta, mu +; RV64-NEXT: vmulh.vx v8, v8, a0 +; RV64-NEXT: vsra.vi v8, v8, 1 +; RV64-NEXT: vsrl.vi v10, v8, 15 +; RV64-NEXT: vadd.vv v8, v8, v10 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -477,16 +522,27 @@ } define @vdiv_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v12, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v12 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv16i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, m4, ta, mu +; RV32-NEXT: vmulh.vx v8, v8, a0 +; RV32-NEXT: vsra.vi v8, v8, 1 +; RV32-NEXT: vsrl.vi v12, v8, 15 +; RV32-NEXT: vadd.vv v8, v8, v12 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv16i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, m4, ta, mu +; RV64-NEXT: vmulh.vx v8, v8, a0 +; RV64-NEXT: vsra.vi v8, v8, 1 +; RV64-NEXT: vsrl.vi v12, v8, 15 +; RV64-NEXT: vadd.vv v8, v8, v12 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -516,16 +572,27 @@ } define @vdiv_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vsrl.vi v16, v8, 15 -; CHECK-NEXT: vadd.vv v8, v8, v16 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv32i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, m8, ta, mu +; RV32-NEXT: vmulh.vx v8, v8, a0 +; RV32-NEXT: vsra.vi v8, v8, 1 +; RV32-NEXT: vsrl.vi v16, v8, 15 +; RV32-NEXT: vadd.vv v8, v8, v16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv32i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, m8, ta, mu +; RV64-NEXT: vmulh.vx v8, v8, a0 +; RV64-NEXT: vsra.vi v8, v8, 1 +; RV64-NEXT: vsrl.vi v16, v8, 15 +; RV64-NEXT: vadd.vv v8, v8, v16 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -542,7 +609,7 @@ ret %vc } -define @vdiv_vx_nxv1i32( %va, i32 %b) { +define @vdiv_vx_nxv1i32( %va, i32 signext %b) { ; CHECK-LABEL: vdiv_vx_nxv1i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu @@ -555,17 +622,29 @@ } define @vdiv_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addi a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v8, v9, v8 -; CHECK-NEXT: vsrl.vi v9, v8, 31 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv1i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 449390 +; RV32-NEXT: addi a0, a0, -1171 +; RV32-NEXT: vsetvli a1, zero, e32, mf2, ta, mu +; RV32-NEXT: vmulh.vx v9, v8, a0 +; RV32-NEXT: vsub.vv v8, v9, v8 +; RV32-NEXT: vsrl.vi v9, v8, 31 +; RV32-NEXT: vsra.vi v8, v8, 2 +; RV32-NEXT: vadd.vv v8, v8, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv1i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 449390 +; RV64-NEXT: addiw a0, a0, -1171 +; RV64-NEXT: vsetvli a1, zero, e32, mf2, ta, mu +; RV64-NEXT: vmulh.vx v9, v8, a0 +; RV64-NEXT: vsub.vv v8, v9, v8 +; RV64-NEXT: vsra.vi v8, v8, 2 +; RV64-NEXT: vsrl.vi v9, v8, 31 +; RV64-NEXT: vadd.vv v8, v8, v9 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -582,7 +661,7 @@ ret %vc } -define @vdiv_vx_nxv2i32( %va, i32 %b) { +define @vdiv_vx_nxv2i32( %va, i32 signext %b) { ; CHECK-LABEL: vdiv_vx_nxv2i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu @@ -595,17 +674,29 @@ } define @vdiv_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addi a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v8, v9, v8 -; CHECK-NEXT: vsrl.vi v9, v8, 31 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv2i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 449390 +; RV32-NEXT: addi a0, a0, -1171 +; RV32-NEXT: vsetvli a1, zero, e32, m1, ta, mu +; RV32-NEXT: vmulh.vx v9, v8, a0 +; RV32-NEXT: vsub.vv v8, v9, v8 +; RV32-NEXT: vsrl.vi v9, v8, 31 +; RV32-NEXT: vsra.vi v8, v8, 2 +; RV32-NEXT: vadd.vv v8, v8, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv2i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 449390 +; RV64-NEXT: addiw a0, a0, -1171 +; RV64-NEXT: vsetvli a1, zero, e32, m1, ta, mu +; RV64-NEXT: vmulh.vx v9, v8, a0 +; RV64-NEXT: vsub.vv v8, v9, v8 +; RV64-NEXT: vsra.vi v8, v8, 2 +; RV64-NEXT: vsrl.vi v9, v8, 31 +; RV64-NEXT: vadd.vv v8, v8, v9 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -622,7 +713,7 @@ ret %vc } -define @vdiv_vx_nxv4i32( %va, i32 %b) { +define @vdiv_vx_nxv4i32( %va, i32 signext %b) { ; CHECK-LABEL: vdiv_vx_nxv4i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu @@ -635,17 +726,29 @@ } define @vdiv_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addi a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmulh.vx v10, v8, a0 -; CHECK-NEXT: vsub.vv v8, v10, v8 -; CHECK-NEXT: vsrl.vi v10, v8, 31 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vadd.vv v8, v8, v10 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv4i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 449390 +; RV32-NEXT: addi a0, a0, -1171 +; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vmulh.vx v10, v8, a0 +; RV32-NEXT: vsub.vv v8, v10, v8 +; RV32-NEXT: vsrl.vi v10, v8, 31 +; RV32-NEXT: vsra.vi v8, v8, 2 +; RV32-NEXT: vadd.vv v8, v8, v10 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv4i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 449390 +; RV64-NEXT: addiw a0, a0, -1171 +; RV64-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV64-NEXT: vmulh.vx v10, v8, a0 +; RV64-NEXT: vsub.vv v8, v10, v8 +; RV64-NEXT: vsra.vi v8, v8, 2 +; RV64-NEXT: vsrl.vi v10, v8, 31 +; RV64-NEXT: vadd.vv v8, v8, v10 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -662,7 +765,7 @@ ret %vc } -define @vdiv_vx_nxv8i32( %va, i32 %b) { +define @vdiv_vx_nxv8i32( %va, i32 signext %b) { ; CHECK-LABEL: vdiv_vx_nxv8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu @@ -675,17 +778,29 @@ } define @vdiv_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addi a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmulh.vx v12, v8, a0 -; CHECK-NEXT: vsub.vv v8, v12, v8 -; CHECK-NEXT: vsrl.vi v12, v8, 31 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vadd.vv v8, v8, v12 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv8i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 449390 +; RV32-NEXT: addi a0, a0, -1171 +; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu +; RV32-NEXT: vmulh.vx v12, v8, a0 +; RV32-NEXT: vsub.vv v8, v12, v8 +; RV32-NEXT: vsrl.vi v12, v8, 31 +; RV32-NEXT: vsra.vi v8, v8, 2 +; RV32-NEXT: vadd.vv v8, v8, v12 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv8i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 449390 +; RV64-NEXT: addiw a0, a0, -1171 +; RV64-NEXT: vsetvli a1, zero, e32, m4, ta, mu +; RV64-NEXT: vmulh.vx v12, v8, a0 +; RV64-NEXT: vsub.vv v8, v12, v8 +; RV64-NEXT: vsra.vi v8, v8, 2 +; RV64-NEXT: vsrl.vi v12, v8, 31 +; RV64-NEXT: vadd.vv v8, v8, v12 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -702,7 +817,7 @@ ret %vc } -define @vdiv_vx_nxv16i32( %va, i32 %b) { +define @vdiv_vx_nxv16i32( %va, i32 signext %b) { ; CHECK-LABEL: vdiv_vx_nxv16i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu @@ -715,17 +830,29 @@ } define @vdiv_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addi a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: vsub.vv v8, v16, v8 -; CHECK-NEXT: vsrl.vi v16, v8, 31 -; CHECK-NEXT: vsra.vi v8, v8, 2 -; CHECK-NEXT: vadd.vv v8, v8, v16 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv16i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 449390 +; RV32-NEXT: addi a0, a0, -1171 +; RV32-NEXT: vsetvli a1, zero, e32, m8, ta, mu +; RV32-NEXT: vmulh.vx v16, v8, a0 +; RV32-NEXT: vsub.vv v8, v16, v8 +; RV32-NEXT: vsrl.vi v16, v8, 31 +; RV32-NEXT: vsra.vi v8, v8, 2 +; RV32-NEXT: vadd.vv v8, v8, v16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv16i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 449390 +; RV64-NEXT: addiw a0, a0, -1171 +; RV64-NEXT: vsetvli a1, zero, e32, m8, ta, mu +; RV64-NEXT: vmulh.vx v16, v8, a0 +; RV64-NEXT: vsub.vv v8, v16, v8 +; RV64-NEXT: vsra.vi v8, v8, 2 +; RV64-NEXT: vsrl.vi v16, v8, 31 +; RV64-NEXT: vadd.vv v8, v8, v16 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -743,18 +870,24 @@ } define @vdiv_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vdiv_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vdiv.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vdiv.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vdiv.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -762,26 +895,44 @@ } define @vdiv_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 748983 -; CHECK-NEXT: addi a0, a0, -586 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: lui a0, 898779 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vmulh.vv v8, v8, v9 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v9, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vadd.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv1i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 748983 +; RV32-NEXT: addi a0, a0, -586 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: lui a0, 898779 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vmulh.vv v8, v8, v9 +; RV32-NEXT: addi a0, zero, 63 +; RV32-NEXT: vsrl.vx v9, v8, a0 +; RV32-NEXT: vsra.vi v8, v8, 1 +; RV32-NEXT: vadd.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv1i64_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1029851 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vmulh.vx v8, v8, a0 +; RV64-NEXT: addi a0, zero, 63 +; RV64-NEXT: vsrl.vx v9, v8, a0 +; RV64-NEXT: vsra.vi v8, v8, 1 +; RV64-NEXT: vadd.vv v8, v8, v9 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -799,18 +950,24 @@ } define @vdiv_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vdiv_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vdiv.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vdiv.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vdiv.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -818,26 +975,44 @@ } define @vdiv_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 748983 -; CHECK-NEXT: addi a0, a0, -586 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: lui a0, 898779 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vmulh.vv v8, v8, v10 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v10, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vadd.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv2i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 748983 +; RV32-NEXT: addi a0, a0, -586 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: lui a0, 898779 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vmulh.vv v8, v8, v10 +; RV32-NEXT: addi a0, zero, 63 +; RV32-NEXT: vsrl.vx v10, v8, a0 +; RV32-NEXT: vsra.vi v8, v8, 1 +; RV32-NEXT: vadd.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv2i64_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1029851 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vmulh.vx v8, v8, a0 +; RV64-NEXT: addi a0, zero, 63 +; RV64-NEXT: vsrl.vx v10, v8, a0 +; RV64-NEXT: vsra.vi v8, v8, 1 +; RV64-NEXT: vadd.vv v8, v8, v10 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -855,18 +1030,24 @@ } define @vdiv_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vdiv_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vdiv.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vdiv.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vdiv.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -874,26 +1055,44 @@ } define @vdiv_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 748983 -; CHECK-NEXT: addi a0, a0, -586 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: lui a0, 898779 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vmulh.vv v8, v8, v12 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v12, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vadd.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv4i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 748983 +; RV32-NEXT: addi a0, a0, -586 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: lui a0, 898779 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vmulh.vv v8, v8, v12 +; RV32-NEXT: addi a0, zero, 63 +; RV32-NEXT: vsrl.vx v12, v8, a0 +; RV32-NEXT: vsra.vi v8, v8, 1 +; RV32-NEXT: vadd.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv4i64_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1029851 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vmulh.vx v8, v8, a0 +; RV64-NEXT: addi a0, zero, 63 +; RV64-NEXT: vsrl.vx v12, v8, a0 +; RV64-NEXT: vsra.vi v8, v8, 1 +; RV64-NEXT: vadd.vv v8, v8, v12 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -911,18 +1110,24 @@ } define @vdiv_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vdiv_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vdiv.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vdiv.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vdiv.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat @@ -930,26 +1135,44 @@ } define @vdiv_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vdiv_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 748983 -; CHECK-NEXT: addi a0, a0, -586 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: lui a0, 898779 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vmulh.vv v8, v8, v16 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v16, v8, a0 -; CHECK-NEXT: vsra.vi v8, v8, 1 -; CHECK-NEXT: vadd.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdiv_vi_nxv8i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 748983 +; RV32-NEXT: addi a0, a0, -586 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: lui a0, 898779 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vmulh.vv v8, v8, v16 +; RV32-NEXT: addi a0, zero, 63 +; RV32-NEXT: vsrl.vx v16, v8, a0 +; RV32-NEXT: vsra.vi v8, v8, 1 +; RV32-NEXT: vadd.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdiv_vi_nxv8i64_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1029851 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vmulh.vx v8, v8, a0 +; RV64-NEXT: addi a0, zero, 63 +; RV64-NEXT: vsrl.vx v16, v8, a0 +; RV64-NEXT: vsra.vi v8, v8, 1 +; RV64-NEXT: vadd.vv v8, v8, v16 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sdiv %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vdivu-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vdivu-sdnode-rv64.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vdivu-sdnode-rv64.ll +++ /dev/null @@ -1,925 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vdivu_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 5 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 5 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 5 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 5 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 5 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 5 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 5 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv1i32( %va, i32 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 29 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv2i32( %va, i32 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 29 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv4i32( %va, i32 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 29 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv8i32( %va, i32 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 29 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv16i32( %va, i32 signext %b) { -; CHECK-LABEL: vdivu_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 29 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vdivu_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: slli a0, a0, 61 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv1i64_1( %va) { -; CHECK-LABEL: vdivu_vi_nxv1i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -; fold (udiv x, (shl c, y)) -> x >>u (log2(c)+y) if c is power of 2 -define @vdivu_vi_nxv1i64_2( %va, %vb) { -; CHECK-LABEL: vdivu_vi_nxv1i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vadd.vi v9, v9, 4 -; CHECK-NEXT: vsrl.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %splat, %vb - %vd = udiv %va, %vc - ret %vd -} - -define @vdivu_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vdivu_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: slli a0, a0, 61 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv2i64_1( %va) { -; CHECK-LABEL: vdivu_vi_nxv2i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -; fold (udiv x, (shl c, y)) -> x >>u (log2(c)+y) if c is power of 2 -define @vdivu_vi_nxv2i64_2( %va, %vb) { -; CHECK-LABEL: vdivu_vi_nxv2i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vadd.vi v10, v10, 4 -; CHECK-NEXT: vsrl.vv v8, v8, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %splat, %vb - %vd = udiv %va, %vc - ret %vd -} - -define @vdivu_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vdivu_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: slli a0, a0, 61 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv4i64_1( %va) { -; CHECK-LABEL: vdivu_vi_nxv4i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -; fold (udiv x, (shl c, y)) -> x >>u (log2(c)+y) if c is power of 2 -define @vdivu_vi_nxv4i64_2( %va, %vb) { -; CHECK-LABEL: vdivu_vi_nxv4i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vadd.vi v12, v12, 4 -; CHECK-NEXT: vsrl.vv v8, v8, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %splat, %vb - %vd = udiv %va, %vc - ret %vd -} - -define @vdivu_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vdivu_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vdivu.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = udiv %va, %vb - ret %vc -} - -define @vdivu_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vdivu_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vdivu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: slli a0, a0, 61 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -define @vdivu_vi_nxv8i64_1( %va) { -; CHECK-LABEL: vdivu_vi_nxv8i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = udiv %va, %splat - ret %vc -} - -; fold (udiv x, (shl c, y)) -> x >>u (log2(c)+y) if c is power of 2 -define @vdivu_vi_nxv8i64_2( %va, %vb) { -; CHECK-LABEL: vdivu_vi_nxv8i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vadd.vi v16, v16, 4 -; CHECK-NEXT: vsrl.vv v8, v8, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %splat, %vb - %vd = udiv %va, %vc - ret %vd -} diff --git a/llvm/test/CodeGen/RISCV/rvv/vdivu-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vdivu-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vdivu-sdnode-rv32.ll rename to llvm/test/CodeGen/RISCV/rvv/vdivu-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vdivu-sdnode-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vdivu-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vdivu_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vdivu_vv_nxv1i8: @@ -300,14 +301,23 @@ } define @vdivu_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv1i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, mf4, ta, mu +; RV32-NEXT: vmulhu.vx v8, v8, a0 +; RV32-NEXT: vsrl.vi v8, v8, 13 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv1i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, mf4, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: vsrl.vi v8, v8, 13 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -337,14 +347,23 @@ } define @vdivu_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv2i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, mf2, ta, mu +; RV32-NEXT: vmulhu.vx v8, v8, a0 +; RV32-NEXT: vsrl.vi v8, v8, 13 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv2i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, mf2, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: vsrl.vi v8, v8, 13 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -374,14 +393,23 @@ } define @vdivu_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv4i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, m1, ta, mu +; RV32-NEXT: vmulhu.vx v8, v8, a0 +; RV32-NEXT: vsrl.vi v8, v8, 13 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv4i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, m1, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: vsrl.vi v8, v8, 13 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -411,14 +439,23 @@ } define @vdivu_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv8i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, m2, ta, mu +; RV32-NEXT: vmulhu.vx v8, v8, a0 +; RV32-NEXT: vsrl.vi v8, v8, 13 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv8i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, m2, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: vsrl.vi v8, v8, 13 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -448,14 +485,23 @@ } define @vdivu_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv16i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, m4, ta, mu +; RV32-NEXT: vmulhu.vx v8, v8, a0 +; RV32-NEXT: vsrl.vi v8, v8, 13 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv16i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, m4, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: vsrl.vi v8, v8, 13 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -485,14 +531,23 @@ } define @vdivu_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 13 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv32i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, m8, ta, mu +; RV32-NEXT: vmulhu.vx v8, v8, a0 +; RV32-NEXT: vsrl.vi v8, v8, 13 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv32i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, m8, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: vsrl.vi v8, v8, 13 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -509,7 +564,7 @@ ret %vc } -define @vdivu_vx_nxv1i32( %va, i32 %b) { +define @vdivu_vx_nxv1i32( %va, i32 signext %b) { ; CHECK-LABEL: vdivu_vx_nxv1i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu @@ -522,14 +577,23 @@ } define @vdivu_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 29 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv1i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e32, mf2, ta, mu +; RV32-NEXT: vmulhu.vx v8, v8, a0 +; RV32-NEXT: vsrl.vi v8, v8, 29 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv1i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 131072 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e32, mf2, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: vsrl.vi v8, v8, 29 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -546,7 +610,7 @@ ret %vc } -define @vdivu_vx_nxv2i32( %va, i32 %b) { +define @vdivu_vx_nxv2i32( %va, i32 signext %b) { ; CHECK-LABEL: vdivu_vx_nxv2i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu @@ -559,14 +623,23 @@ } define @vdivu_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 29 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv2i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e32, m1, ta, mu +; RV32-NEXT: vmulhu.vx v8, v8, a0 +; RV32-NEXT: vsrl.vi v8, v8, 29 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv2i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 131072 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e32, m1, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: vsrl.vi v8, v8, 29 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -583,7 +656,7 @@ ret %vc } -define @vdivu_vx_nxv4i32( %va, i32 %b) { +define @vdivu_vx_nxv4i32( %va, i32 signext %b) { ; CHECK-LABEL: vdivu_vx_nxv4i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu @@ -596,14 +669,23 @@ } define @vdivu_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 29 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv4i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vmulhu.vx v8, v8, a0 +; RV32-NEXT: vsrl.vi v8, v8, 29 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv4i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 131072 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: vsrl.vi v8, v8, 29 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -620,7 +702,7 @@ ret %vc } -define @vdivu_vx_nxv8i32( %va, i32 %b) { +define @vdivu_vx_nxv8i32( %va, i32 signext %b) { ; CHECK-LABEL: vdivu_vx_nxv8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu @@ -633,14 +715,23 @@ } define @vdivu_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 29 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv8i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu +; RV32-NEXT: vmulhu.vx v8, v8, a0 +; RV32-NEXT: vsrl.vi v8, v8, 29 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv8i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 131072 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e32, m4, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: vsrl.vi v8, v8, 29 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -657,7 +748,7 @@ ret %vc } -define @vdivu_vx_nxv16i32( %va, i32 %b) { +define @vdivu_vx_nxv16i32( %va, i32 signext %b) { ; CHECK-LABEL: vdivu_vx_nxv16i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu @@ -670,14 +761,23 @@ } define @vdivu_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v8, v8, a0 -; CHECK-NEXT: vsrl.vi v8, v8, 29 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv16i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e32, m8, ta, mu +; RV32-NEXT: vmulhu.vx v8, v8, a0 +; RV32-NEXT: vsrl.vi v8, v8, 29 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv16i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 131072 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e32, m8, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: vsrl.vi v8, v8, 29 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -695,18 +795,24 @@ } define @vdivu_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vdivu_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vdivu.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vdivu.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vdivu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -714,22 +820,33 @@ } define @vdivu_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vmulhu.vv v8, v8, v9 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv1i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: addi a0, zero, 1 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vmulhu.vv v8, v8, v9 +; RV32-NEXT: addi a0, zero, 61 +; RV32-NEXT: vsrl.vx v8, v8, a0 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv1i64_0: +; RV64: # %bb.0: +; RV64-NEXT: addi a0, zero, 1 +; RV64-NEXT: slli a0, a0, 61 +; RV64-NEXT: addi a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: addi a0, zero, 61 +; RV64-NEXT: vsrl.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -774,18 +891,24 @@ } define @vdivu_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vdivu_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vdivu.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vdivu.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vdivu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -793,22 +916,33 @@ } define @vdivu_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vmulhu.vv v8, v8, v10 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv2i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: addi a0, zero, 1 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vmulhu.vv v8, v8, v10 +; RV32-NEXT: addi a0, zero, 61 +; RV32-NEXT: vsrl.vx v8, v8, a0 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv2i64_0: +; RV64: # %bb.0: +; RV64-NEXT: addi a0, zero, 1 +; RV64-NEXT: slli a0, a0, 61 +; RV64-NEXT: addi a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: addi a0, zero, 61 +; RV64-NEXT: vsrl.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -853,18 +987,24 @@ } define @vdivu_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vdivu_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vdivu.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vdivu.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vdivu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -872,22 +1012,33 @@ } define @vdivu_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vmulhu.vv v8, v8, v12 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv4i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: addi a0, zero, 1 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vmulhu.vv v8, v8, v12 +; RV32-NEXT: addi a0, zero, 61 +; RV32-NEXT: vsrl.vx v8, v8, a0 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv4i64_0: +; RV64: # %bb.0: +; RV64-NEXT: addi a0, zero, 1 +; RV64-NEXT: slli a0, a0, 61 +; RV64-NEXT: addi a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: addi a0, zero, 61 +; RV64-NEXT: vsrl.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -932,18 +1083,24 @@ } define @vdivu_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vdivu_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vdivu.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vdivu.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vdivu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat @@ -951,22 +1108,33 @@ } define @vdivu_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vdivu_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vmulhu.vv v8, v8, v16 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret +; RV32-LABEL: vdivu_vi_nxv8i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: addi a0, zero, 1 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vmulhu.vv v8, v8, v16 +; RV32-NEXT: addi a0, zero, 61 +; RV32-NEXT: vsrl.vx v8, v8, a0 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vdivu_vi_nxv8i64_0: +; RV64: # %bb.0: +; RV64-NEXT: addi a0, zero, 1 +; RV64-NEXT: slli a0, a0, 61 +; RV64-NEXT: addi a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vmulhu.vx v8, v8, a0 +; RV64-NEXT: addi a0, zero, 61 +; RV64-NEXT: vsrl.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = udiv %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vexts-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vexts-sdnode-rv64.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vexts-sdnode-rv64.ll +++ /dev/null @@ -1,619 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vsext_nxv1i8_nxv1i16( %va) { -; CHECK-LABEL: vsext_nxv1i8_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vsext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv1i8_nxv1i16( %va) { -; CHECK-LABEL: vzext_nxv1i8_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vzext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv1i8_nxv1i32( %va) { -; CHECK-LABEL: vsext_nxv1i8_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsext.vf4 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv1i8_nxv1i32( %va) { -; CHECK-LABEL: vzext_nxv1i8_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vzext.vf4 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv1i8_nxv1i64( %va) { -; CHECK-LABEL: vsext_nxv1i8_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vsext.vf8 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv1i8_nxv1i64( %va) { -; CHECK-LABEL: vzext_nxv1i8_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vzext.vf8 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv2i8_nxv2i16( %va) { -; CHECK-LABEL: vsext_nxv2i8_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vsext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv2i8_nxv2i16( %va) { -; CHECK-LABEL: vzext_nxv2i8_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vzext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv2i8_nxv2i32( %va) { -; CHECK-LABEL: vsext_nxv2i8_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vsext.vf4 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv2i8_nxv2i32( %va) { -; CHECK-LABEL: vzext_nxv2i8_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vzext.vf4 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv2i8_nxv2i64( %va) { -; CHECK-LABEL: vsext_nxv2i8_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vsext.vf8 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv2i8_nxv2i64( %va) { -; CHECK-LABEL: vzext_nxv2i8_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vzext.vf8 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv4i8_nxv4i16( %va) { -; CHECK-LABEL: vsext_nxv4i8_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vsext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv4i8_nxv4i16( %va) { -; CHECK-LABEL: vzext_nxv4i8_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vzext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv4i8_nxv4i32( %va) { -; CHECK-LABEL: vsext_nxv4i8_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vsext.vf4 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv4i8_nxv4i32( %va) { -; CHECK-LABEL: vzext_nxv4i8_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vzext.vf4 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv4i8_nxv4i64( %va) { -; CHECK-LABEL: vsext_nxv4i8_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vsext.vf8 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv4i8_nxv4i64( %va) { -; CHECK-LABEL: vzext_nxv4i8_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vzext.vf8 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv8i8_nxv8i16( %va) { -; CHECK-LABEL: vsext_nxv8i8_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vsext.vf2 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv8i8_nxv8i16( %va) { -; CHECK-LABEL: vzext_nxv8i8_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vzext.vf2 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv8i8_nxv8i32( %va) { -; CHECK-LABEL: vsext_nxv8i8_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vsext.vf4 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv8i8_nxv8i32( %va) { -; CHECK-LABEL: vzext_nxv8i8_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vzext.vf4 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv8i8_nxv8i64( %va) { -; CHECK-LABEL: vsext_nxv8i8_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vsext.vf8 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv8i8_nxv8i64( %va) { -; CHECK-LABEL: vzext_nxv8i8_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vzext.vf8 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv16i8_nxv16i16( %va) { -; CHECK-LABEL: vsext_nxv16i8_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vsext.vf2 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv16i8_nxv16i16( %va) { -; CHECK-LABEL: vzext_nxv16i8_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vzext.vf2 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv16i8_nxv16i32( %va) { -; CHECK-LABEL: vsext_nxv16i8_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vsext.vf4 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv16i8_nxv16i32( %va) { -; CHECK-LABEL: vzext_nxv16i8_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vzext.vf4 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv32i8_nxv32i16( %va) { -; CHECK-LABEL: vsext_nxv32i8_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vsext.vf2 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv32i8_nxv32i16( %va) { -; CHECK-LABEL: vzext_nxv32i8_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vzext.vf2 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv1i16_nxv1i32( %va) { -; CHECK-LABEL: vsext_nxv1i16_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv1i16_nxv1i32( %va) { -; CHECK-LABEL: vzext_nxv1i16_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vzext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv1i16_nxv1i64( %va) { -; CHECK-LABEL: vsext_nxv1i16_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vsext.vf4 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv1i16_nxv1i64( %va) { -; CHECK-LABEL: vzext_nxv1i16_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vzext.vf4 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv2i16_nxv2i32( %va) { -; CHECK-LABEL: vsext_nxv2i16_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vsext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv2i16_nxv2i32( %va) { -; CHECK-LABEL: vzext_nxv2i16_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vzext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv2i16_nxv2i64( %va) { -; CHECK-LABEL: vsext_nxv2i16_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vsext.vf4 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv2i16_nxv2i64( %va) { -; CHECK-LABEL: vzext_nxv2i16_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vzext.vf4 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv4i16_nxv4i32( %va) { -; CHECK-LABEL: vsext_nxv4i16_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vsext.vf2 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv4i16_nxv4i32( %va) { -; CHECK-LABEL: vzext_nxv4i16_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vzext.vf2 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv4i16_nxv4i64( %va) { -; CHECK-LABEL: vsext_nxv4i16_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vsext.vf4 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv4i16_nxv4i64( %va) { -; CHECK-LABEL: vzext_nxv4i16_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vzext.vf4 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv8i16_nxv8i32( %va) { -; CHECK-LABEL: vsext_nxv8i16_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vsext.vf2 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv8i16_nxv8i32( %va) { -; CHECK-LABEL: vzext_nxv8i16_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vzext.vf2 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv8i16_nxv8i64( %va) { -; CHECK-LABEL: vsext_nxv8i16_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vsext.vf4 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv8i16_nxv8i64( %va) { -; CHECK-LABEL: vzext_nxv8i16_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vzext.vf4 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv16i16_nxv16i32( %va) { -; CHECK-LABEL: vsext_nxv16i16_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vsext.vf2 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv16i16_nxv16i32( %va) { -; CHECK-LABEL: vzext_nxv16i16_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vzext.vf2 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv1i32_nxv1i64( %va) { -; CHECK-LABEL: vsext_nxv1i32_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vsext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv1i32_nxv1i64( %va) { -; CHECK-LABEL: vzext_nxv1i32_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vzext.vf2 v9, v8 -; CHECK-NEXT: vmv1r.v v8, v9 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv2i32_nxv2i64( %va) { -; CHECK-LABEL: vsext_nxv2i32_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vsext.vf2 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv2i32_nxv2i64( %va) { -; CHECK-LABEL: vzext_nxv2i32_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vzext.vf2 v10, v8 -; CHECK-NEXT: vmv2r.v v8, v10 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv4i32_nxv4i64( %va) { -; CHECK-LABEL: vsext_nxv4i32_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vsext.vf2 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv4i32_nxv4i64( %va) { -; CHECK-LABEL: vzext_nxv4i32_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vzext.vf2 v12, v8 -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - -define @vsext_nxv8i32_nxv8i64( %va) { -; CHECK-LABEL: vsext_nxv8i32_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vsext.vf2 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = sext %va to - ret %evec -} - -define @vzext_nxv8i32_nxv8i64( %va) { -; CHECK-LABEL: vzext_nxv8i32_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vzext.vf2 v16, v8 -; CHECK-NEXT: vmv8r.v v8, v16 -; CHECK-NEXT: ret - %evec = zext %va to - ret %evec -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vexts-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vexts-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vexts-sdnode-rv32.ll rename to llvm/test/CodeGen/RISCV/rvv/vexts-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vexts-sdnode-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vexts-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s define @vsext_nxv1i8_nxv1i16( %va) { ; CHECK-LABEL: vsext_nxv1i8_nxv1i16: diff --git a/llvm/test/CodeGen/RISCV/rvv/vmax-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmax-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vmax-sdnode-rv32.ll +++ /dev/null @@ -1,867 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vmax_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vmax_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vmax_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vmax_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vmax_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vmax_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vmax_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vmax_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vmax_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vmax_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vmax_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vmax.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vmax_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vmax.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vmax_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vmax.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vmax_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vmax.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp sgt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vmax.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vmax_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp sgt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vmax-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmax-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vmax-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vmax-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vmax-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vmax-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vmax_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vmax_vv_nxv1i8: @@ -697,11 +698,24 @@ } define @vmax_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmax_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vmax.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmax_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vmax.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp sgt %va, %splat @@ -735,11 +749,24 @@ } define @vmax_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmax_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vmax.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmax_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vmax.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp sgt %va, %splat @@ -773,11 +800,24 @@ } define @vmax_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmax_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vmax.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmax_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vmax.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp sgt %va, %splat @@ -811,11 +851,24 @@ } define @vmax_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmax.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmax_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vmax.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmax_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vmax.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp sgt %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vmaxu-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmaxu-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vmaxu-sdnode-rv32.ll +++ /dev/null @@ -1,867 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vmax_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vmax_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vmax_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vmax_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vmax_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vmax_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vmax_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vmax_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vmax_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vmax_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vmax_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vmax_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vmax_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vmax_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vmax_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vmaxu.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vmax_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vmaxu.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vmax_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vmaxu.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vmax_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vmax_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vmaxu.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp ugt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmax_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vmaxu.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmax_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vmax_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ugt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vmaxu-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmaxu-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vmaxu-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vmaxu-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vmaxu-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vmaxu-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vmax_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vmax_vv_nxv1i8: @@ -697,11 +698,24 @@ } define @vmax_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmax_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vmaxu.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmax_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vmaxu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp ugt %va, %splat @@ -735,11 +749,24 @@ } define @vmax_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmax_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vmaxu.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmax_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vmaxu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp ugt %va, %splat @@ -773,11 +800,24 @@ } define @vmax_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmax_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vmaxu.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmax_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vmaxu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp ugt %va, %splat @@ -811,11 +851,24 @@ } define @vmax_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vmax_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmaxu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmax_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vmaxu.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmax_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vmaxu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp ugt %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vmin-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmin-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vmin-sdnode-rv32.ll +++ /dev/null @@ -1,867 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vmin_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vmin_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vmin_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vmin_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vmin_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vmin_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vmin_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vmin_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vmin_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vmin_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vmin_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vmin.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vmin_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vmin.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vmin_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vmin.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vmin_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vmin.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp slt %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vmin.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vmin_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp slt %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vmin-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmin-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vmin-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vmin-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vmin-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vmin-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vmin_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vmin_vv_nxv1i8: @@ -697,11 +698,24 @@ } define @vmin_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmin_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vmin.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmin_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vmin.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp slt %va, %splat @@ -735,11 +749,24 @@ } define @vmin_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmin_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vmin.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmin_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vmin.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp slt %va, %splat @@ -773,11 +800,24 @@ } define @vmin_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmin_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vmin.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmin_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vmin.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp slt %va, %splat @@ -811,11 +851,24 @@ } define @vmin_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmin.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmin_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vmin.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmin_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vmin.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp slt %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vminu-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vminu-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vminu-sdnode-rv32.ll +++ /dev/null @@ -1,867 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vmin_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vmin_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vmin_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vmin_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vmin_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vmin_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vmin_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vmin_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vmin_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vmin_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vmin_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vmin_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vmin_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vmin_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vmin_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v9 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vminu.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vmin_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v10 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vminu.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vmin_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v12 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vminu.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vmin_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vmin_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vminu.vv v8, v8, v16 -; CHECK-NEXT: ret - %cmp = icmp ult %va, %vb - %vc = select %cmp, %va, %vb - ret %vc -} - -define @vmin_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vminu.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - -define @vmin_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vmin_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -3 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -3, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %cmp = icmp ult %va, %splat - %vc = select %cmp, %va, %splat - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vminu-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vminu-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vminu-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vminu-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vminu-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vminu-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vmin_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vmin_vv_nxv1i8: @@ -697,11 +698,24 @@ } define @vmin_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmin_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vminu.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmin_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vminu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp ult %va, %splat @@ -735,11 +749,24 @@ } define @vmin_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmin_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vminu.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmin_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vminu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp ult %va, %splat @@ -773,11 +800,24 @@ } define @vmin_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmin_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vminu.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmin_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vminu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp ult %va, %splat @@ -811,11 +851,24 @@ } define @vmin_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vmin_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vminu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmin_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vminu.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmin_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vminu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %cmp = icmp ult %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vmul-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmul-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vmul-sdnode-rv32.ll +++ /dev/null @@ -1,896 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vmul_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vmul_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vmul_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vmul_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vmul_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vmul_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vmul_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vmul_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vmul_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vmul_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vmul_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vmul_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vmul_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vmul_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vmul_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vmul_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vmul_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vmul_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vmul_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vmul_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vmul_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vmul_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vmul_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vmul_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vmul_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vmul_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vmul_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vmul_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vmul_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vmul_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vmul_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vmul_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vmul_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vmul_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vmul_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vmul_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vmul_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vmul_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vmul.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vmul_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv1i64_1( %va) { -; CHECK-LABEL: vmul_vi_nxv1i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vadd.vv v8, v8, v8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv1i64_2( %va) { -; CHECK-LABEL: vmul_vi_nxv1i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 4 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vmul_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vmul.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vmul_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv2i64_1( %va) { -; CHECK-LABEL: vmul_vi_nxv2i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vadd.vv v8, v8, v8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv2i64_2( %va) { -; CHECK-LABEL: vmul_vi_nxv2i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 4 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vmul_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vmul.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vmul_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv4i64_1( %va) { -; CHECK-LABEL: vmul_vi_nxv4i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vadd.vv v8, v8, v8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv4i64_2( %va) { -; CHECK-LABEL: vmul_vi_nxv4i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 4 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vmul_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vmul.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = mul %va, %vb - ret %vc -} - -define @vmul_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vmul_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vmul.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vmul_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv8i64_1( %va) { -; CHECK-LABEL: vmul_vi_nxv8i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vadd.vv v8, v8, v8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 2, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} - -define @vmul_vi_nxv8i64_2( %va) { -; CHECK-LABEL: vmul_vi_nxv8i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 4 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = mul %va, %splat - ret %vc -} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmul-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmul-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vmul-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vmul-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vmul-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vmul-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vmul_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vmul_vv_nxv1i8: @@ -642,11 +643,24 @@ } define @vmul_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vmul_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmul_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vmul.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmul_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vmul.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = mul %va, %splat @@ -701,11 +715,24 @@ } define @vmul_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vmul_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmul_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vmul.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmul_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vmul.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = mul %va, %splat @@ -760,11 +787,24 @@ } define @vmul_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vmul_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmul_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vmul.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmul_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vmul.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = mul %va, %splat @@ -819,11 +859,24 @@ } define @vmul_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vmul_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmul.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vmul_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vmul.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vmul_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vmul.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = mul %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vor-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vor-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vor-sdnode-rv32.ll +++ /dev/null @@ -1,1120 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vor_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vor_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i8_0( %va) { -; CHECK-LABEL: vor_vx_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i8_1( %va) { -; CHECK-LABEL: vor_vx_nxv1i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i8 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i8_2( %va) { -; CHECK-LABEL: vor_vx_nxv1i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vor_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i8_0( %va) { -; CHECK-LABEL: vor_vx_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i8_1( %va) { -; CHECK-LABEL: vor_vx_nxv2i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i8 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i8_2( %va) { -; CHECK-LABEL: vor_vx_nxv2i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vor_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i8_0( %va) { -; CHECK-LABEL: vor_vx_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i8_1( %va) { -; CHECK-LABEL: vor_vx_nxv4i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i8 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i8_2( %va) { -; CHECK-LABEL: vor_vx_nxv4i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vor_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i8_0( %va) { -; CHECK-LABEL: vor_vx_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i8_1( %va) { -; CHECK-LABEL: vor_vx_nxv8i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i8 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i8_2( %va) { -; CHECK-LABEL: vor_vx_nxv8i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vor_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i8_0( %va) { -; CHECK-LABEL: vor_vx_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i8_1( %va) { -; CHECK-LABEL: vor_vx_nxv16i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i8 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i8_2( %va) { -; CHECK-LABEL: vor_vx_nxv16i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vor_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv32i8_0( %va) { -; CHECK-LABEL: vor_vx_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv32i8_1( %va) { -; CHECK-LABEL: vor_vx_nxv32i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i8 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv32i8_2( %va) { -; CHECK-LABEL: vor_vx_nxv32i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vor_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv64i8_0( %va) { -; CHECK-LABEL: vor_vx_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv64i8_1( %va) { -; CHECK-LABEL: vor_vx_nxv64i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i8 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv64i8_2( %va) { -; CHECK-LABEL: vor_vx_nxv64i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vor_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i16_0( %va) { -; CHECK-LABEL: vor_vx_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i16_1( %va) { -; CHECK-LABEL: vor_vx_nxv1i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i16 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i16_2( %va) { -; CHECK-LABEL: vor_vx_nxv1i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vor_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i16_0( %va) { -; CHECK-LABEL: vor_vx_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i16_1( %va) { -; CHECK-LABEL: vor_vx_nxv2i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i16 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i16_2( %va) { -; CHECK-LABEL: vor_vx_nxv2i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vor_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i16_0( %va) { -; CHECK-LABEL: vor_vx_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i16_1( %va) { -; CHECK-LABEL: vor_vx_nxv4i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i16 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i16_2( %va) { -; CHECK-LABEL: vor_vx_nxv4i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vor_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i16_0( %va) { -; CHECK-LABEL: vor_vx_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i16_1( %va) { -; CHECK-LABEL: vor_vx_nxv8i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i16 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i16_2( %va) { -; CHECK-LABEL: vor_vx_nxv8i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vor_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i16_0( %va) { -; CHECK-LABEL: vor_vx_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i16_1( %va) { -; CHECK-LABEL: vor_vx_nxv16i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i16 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i16_2( %va) { -; CHECK-LABEL: vor_vx_nxv16i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vor_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv32i16_0( %va) { -; CHECK-LABEL: vor_vx_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv32i16_1( %va) { -; CHECK-LABEL: vor_vx_nxv32i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i16 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv32i16_2( %va) { -; CHECK-LABEL: vor_vx_nxv32i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vor_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i32_0( %va) { -; CHECK-LABEL: vor_vx_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i32_1( %va) { -; CHECK-LABEL: vor_vx_nxv1i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i32 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i32_2( %va) { -; CHECK-LABEL: vor_vx_nxv1i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vor_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i32_0( %va) { -; CHECK-LABEL: vor_vx_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i32_1( %va) { -; CHECK-LABEL: vor_vx_nxv2i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i32 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i32_2( %va) { -; CHECK-LABEL: vor_vx_nxv2i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vor_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i32_0( %va) { -; CHECK-LABEL: vor_vx_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i32_1( %va) { -; CHECK-LABEL: vor_vx_nxv4i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i32 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i32_2( %va) { -; CHECK-LABEL: vor_vx_nxv4i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vor_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i32_0( %va) { -; CHECK-LABEL: vor_vx_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i32_1( %va) { -; CHECK-LABEL: vor_vx_nxv8i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i32 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i32_2( %va) { -; CHECK-LABEL: vor_vx_nxv8i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vor_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i32_0( %va) { -; CHECK-LABEL: vor_vx_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i32_1( %va) { -; CHECK-LABEL: vor_vx_nxv16i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i32 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv16i32_2( %va) { -; CHECK-LABEL: vor_vx_nxv16i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vor_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vor.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i64_0( %va) { -; CHECK-LABEL: vor_vx_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i64_1( %va) { -; CHECK-LABEL: vor_vx_nxv1i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i64 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv1i64_2( %va) { -; CHECK-LABEL: vor_vx_nxv1i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vor_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vor.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i64_0( %va) { -; CHECK-LABEL: vor_vx_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i64_1( %va) { -; CHECK-LABEL: vor_vx_nxv2i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i64 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv2i64_2( %va) { -; CHECK-LABEL: vor_vx_nxv2i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vor_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vor.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i64_0( %va) { -; CHECK-LABEL: vor_vx_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i64_1( %va) { -; CHECK-LABEL: vor_vx_nxv4i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i64 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv4i64_2( %va) { -; CHECK-LABEL: vor_vx_nxv4i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vor_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vor.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i64_0( %va) { -; CHECK-LABEL: vor_vx_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vor.vi v8, v8, -12 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -12, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i64_1( %va) { -; CHECK-LABEL: vor_vx_nxv8i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vor.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i64 15, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i64_2( %va) { -; CHECK-LABEL: vor_vx_nxv8i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} - -define @vor_vx_nxv8i64_3( %va) { -; CHECK-LABEL: vor_vx_nxv8i64_3: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vmv.v.i v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = or %va, %splat - ret %vc -} diff --git a/llvm/test/CodeGen/RISCV/rvv/vor-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vor-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vor-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vor-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vor-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vor-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vor_vx_nxv1i8( %va, i8 signext %b) { ; CHECK-LABEL: vor_vx_nxv1i8: @@ -884,11 +885,24 @@ } define @vor_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vor_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vor_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vor.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vor_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vor.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = or %va, %splat @@ -933,11 +947,24 @@ } define @vor_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vor_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vor_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vor.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vor_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vor.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = or %va, %splat @@ -982,11 +1009,24 @@ } define @vor_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vor_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vor_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vor.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vor_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vor.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = or %va, %splat @@ -1031,11 +1071,24 @@ } define @vor_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vor_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vor.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vor_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vor.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vor_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vor.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = or %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv32.ll +++ /dev/null @@ -1,978 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vrem_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vrem_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vrem_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v9, v9, v8 -; CHECK-NEXT: vsra.vi v9, v9, 2 -; CHECK-NEXT: vsrl.vi v10, v9, 7 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vrem_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vrem_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v9, v9, v8 -; CHECK-NEXT: vsra.vi v9, v9, 2 -; CHECK-NEXT: vsrl.vi v10, v9, 7 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vrem_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vrem_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v9, v9, v8 -; CHECK-NEXT: vsra.vi v9, v9, 2 -; CHECK-NEXT: vsrl.vi v10, v9, 7 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vrem_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vrem_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v9, v9, v8 -; CHECK-NEXT: vsra.vi v9, v9, 2 -; CHECK-NEXT: vsrl.vi v10, v9, 7 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vrem_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vrem_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmulh.vx v10, v8, a0 -; CHECK-NEXT: vsub.vv v10, v10, v8 -; CHECK-NEXT: vsra.vi v10, v10, 2 -; CHECK-NEXT: vsrl.vi v12, v10, 7 -; CHECK-NEXT: vadd.vv v10, v10, v12 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vrem_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vrem_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmulh.vx v12, v8, a0 -; CHECK-NEXT: vsub.vv v12, v12, v8 -; CHECK-NEXT: vsra.vi v12, v12, 2 -; CHECK-NEXT: vsrl.vi v16, v12, 7 -; CHECK-NEXT: vadd.vv v12, v12, v16 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vrem_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vrem_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 109 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: vsub.vv v16, v16, v8 -; CHECK-NEXT: vsra.vi v16, v16, 2 -; CHECK-NEXT: vsrl.vi v24, v16, 7 -; CHECK-NEXT: vadd.vv v16, v16, v24 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vrem_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsra.vi v9, v9, 1 -; CHECK-NEXT: vsrl.vi v10, v9, 15 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vrem_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsra.vi v9, v9, 1 -; CHECK-NEXT: vsrl.vi v10, v9, 15 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vrem_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsra.vi v9, v9, 1 -; CHECK-NEXT: vsrl.vi v10, v9, 15 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vrem_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmulh.vx v10, v8, a0 -; CHECK-NEXT: vsra.vi v10, v10, 1 -; CHECK-NEXT: vsrl.vi v12, v10, 15 -; CHECK-NEXT: vadd.vv v10, v10, v12 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vrem_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmulh.vx v12, v8, a0 -; CHECK-NEXT: vsra.vi v12, v12, 1 -; CHECK-NEXT: vsrl.vi v16, v12, 15 -; CHECK-NEXT: vadd.vv v12, v12, v16 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vrem_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: vsra.vi v16, v16, 1 -; CHECK-NEXT: vsrl.vi v24, v16, 15 -; CHECK-NEXT: vadd.vv v16, v16, v24 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vrem_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vrem_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addi a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v9, v9, v8 -; CHECK-NEXT: vsrl.vi v10, v9, 31 -; CHECK-NEXT: vsra.vi v9, v9, 2 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vrem_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vrem_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addi a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v9, v9, v8 -; CHECK-NEXT: vsrl.vi v10, v9, 31 -; CHECK-NEXT: vsra.vi v9, v9, 2 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vrem_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vrem_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addi a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmulh.vx v10, v8, a0 -; CHECK-NEXT: vsub.vv v10, v10, v8 -; CHECK-NEXT: vsrl.vi v12, v10, 31 -; CHECK-NEXT: vsra.vi v10, v10, 2 -; CHECK-NEXT: vadd.vv v10, v10, v12 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vrem_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vrem_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addi a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmulh.vx v12, v8, a0 -; CHECK-NEXT: vsub.vv v12, v12, v8 -; CHECK-NEXT: vsrl.vi v16, v12, 31 -; CHECK-NEXT: vsra.vi v12, v12, 2 -; CHECK-NEXT: vadd.vv v12, v12, v16 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vrem_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vrem_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addi a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: vsub.vv v16, v16, v8 -; CHECK-NEXT: vsrl.vi v24, v16, 31 -; CHECK-NEXT: vsra.vi v16, v16, 2 -; CHECK-NEXT: vadd.vv v16, v16, v24 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vrem_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vrem.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vrem_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 748983 -; CHECK-NEXT: addi a0, a0, -586 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: lui a0, 898779 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vmulh.vv v9, v8, v9 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v10, v9, a0 -; CHECK-NEXT: vsra.vi v9, v9, 1 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vrem_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vrem.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vrem_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 748983 -; CHECK-NEXT: addi a0, a0, -586 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: lui a0, 898779 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vmulh.vv v10, v8, v10 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v12, v10, a0 -; CHECK-NEXT: vsra.vi v10, v10, 1 -; CHECK-NEXT: vadd.vv v10, v10, v12 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vrem_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vrem.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vrem_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 748983 -; CHECK-NEXT: addi a0, a0, -586 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: lui a0, 898779 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vmulh.vv v12, v8, v12 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v16, v12, a0 -; CHECK-NEXT: vsra.vi v12, v12, 1 -; CHECK-NEXT: vadd.vv v12, v12, v16 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vrem_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vrem.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = srem %va, %vb - ret %vc -} - -define @vrem_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vrem_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vrem.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - -define @vrem_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vrem_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 748983 -; CHECK-NEXT: addi a0, a0, -586 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: lui a0, 898779 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vmulh.vv v16, v8, v16 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v24, v16, a0 -; CHECK-NEXT: vsra.vi v16, v16, 1 -; CHECK-NEXT: vadd.vv v16, v16, v24 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = srem %va, %splat - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vrem-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vrem_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vrem_vv_nxv1i8: @@ -311,18 +312,31 @@ } define @vrem_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsra.vi v9, v9, 1 -; CHECK-NEXT: vsrl.vi v10, v9, 15 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv1i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, mf4, ta, mu +; RV32-NEXT: vmulh.vx v9, v8, a0 +; RV32-NEXT: vsra.vi v9, v9, 1 +; RV32-NEXT: vsrl.vi v10, v9, 15 +; RV32-NEXT: vadd.vv v9, v9, v10 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv1i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, mf4, ta, mu +; RV64-NEXT: vmulh.vx v9, v8, a0 +; RV64-NEXT: vsra.vi v9, v9, 1 +; RV64-NEXT: vsrl.vi v10, v9, 15 +; RV64-NEXT: vadd.vv v9, v9, v10 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -352,18 +366,31 @@ } define @vrem_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsra.vi v9, v9, 1 -; CHECK-NEXT: vsrl.vi v10, v9, 15 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv2i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, mf2, ta, mu +; RV32-NEXT: vmulh.vx v9, v8, a0 +; RV32-NEXT: vsra.vi v9, v9, 1 +; RV32-NEXT: vsrl.vi v10, v9, 15 +; RV32-NEXT: vadd.vv v9, v9, v10 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv2i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, mf2, ta, mu +; RV64-NEXT: vmulh.vx v9, v8, a0 +; RV64-NEXT: vsra.vi v9, v9, 1 +; RV64-NEXT: vsrl.vi v10, v9, 15 +; RV64-NEXT: vadd.vv v9, v9, v10 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -393,18 +420,31 @@ } define @vrem_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsra.vi v9, v9, 1 -; CHECK-NEXT: vsrl.vi v10, v9, 15 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv4i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, m1, ta, mu +; RV32-NEXT: vmulh.vx v9, v8, a0 +; RV32-NEXT: vsra.vi v9, v9, 1 +; RV32-NEXT: vsrl.vi v10, v9, 15 +; RV32-NEXT: vadd.vv v9, v9, v10 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv4i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, m1, ta, mu +; RV64-NEXT: vmulh.vx v9, v8, a0 +; RV64-NEXT: vsra.vi v9, v9, 1 +; RV64-NEXT: vsrl.vi v10, v9, 15 +; RV64-NEXT: vadd.vv v9, v9, v10 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -434,18 +474,31 @@ } define @vrem_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmulh.vx v10, v8, a0 -; CHECK-NEXT: vsra.vi v10, v10, 1 -; CHECK-NEXT: vsrl.vi v12, v10, 15 -; CHECK-NEXT: vadd.vv v10, v10, v12 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv8i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, m2, ta, mu +; RV32-NEXT: vmulh.vx v10, v8, a0 +; RV32-NEXT: vsra.vi v10, v10, 1 +; RV32-NEXT: vsrl.vi v12, v10, 15 +; RV32-NEXT: vadd.vv v10, v10, v12 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v10 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv8i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, m2, ta, mu +; RV64-NEXT: vmulh.vx v10, v8, a0 +; RV64-NEXT: vsra.vi v10, v10, 1 +; RV64-NEXT: vsrl.vi v12, v10, 15 +; RV64-NEXT: vadd.vv v10, v10, v12 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v10 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -475,18 +528,31 @@ } define @vrem_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmulh.vx v12, v8, a0 -; CHECK-NEXT: vsra.vi v12, v12, 1 -; CHECK-NEXT: vsrl.vi v16, v12, 15 -; CHECK-NEXT: vadd.vv v12, v12, v16 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv16i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, m4, ta, mu +; RV32-NEXT: vmulh.vx v12, v8, a0 +; RV32-NEXT: vsra.vi v12, v12, 1 +; RV32-NEXT: vsrl.vi v16, v12, 15 +; RV32-NEXT: vadd.vv v12, v12, v16 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v12 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv16i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, m4, ta, mu +; RV64-NEXT: vmulh.vx v12, v8, a0 +; RV64-NEXT: vsra.vi v12, v12, 1 +; RV64-NEXT: vsrl.vi v16, v12, 15 +; RV64-NEXT: vadd.vv v12, v12, v16 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v12 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -516,18 +582,31 @@ } define @vrem_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vrem_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1048571 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: vsra.vi v16, v16, 1 -; CHECK-NEXT: vsrl.vi v24, v16, 15 -; CHECK-NEXT: vadd.vv v16, v16, v24 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv32i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 1048571 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: vsetvli a1, zero, e16, m8, ta, mu +; RV32-NEXT: vmulh.vx v16, v8, a0 +; RV32-NEXT: vsra.vi v16, v16, 1 +; RV32-NEXT: vsrl.vi v24, v16, 15 +; RV32-NEXT: vadd.vv v16, v16, v24 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv32i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1048571 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e16, m8, ta, mu +; RV64-NEXT: vmulh.vx v16, v8, a0 +; RV64-NEXT: vsra.vi v16, v16, 1 +; RV64-NEXT: vsrl.vi v24, v16, 15 +; RV64-NEXT: vadd.vv v16, v16, v24 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v16 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -557,19 +636,33 @@ } define @vrem_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vrem_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addiw a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v9, v9, v8 -; CHECK-NEXT: vsra.vi v9, v9, 2 -; CHECK-NEXT: vsrl.vi v10, v9, 31 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv1i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 449390 +; RV32-NEXT: addi a0, a0, -1171 +; RV32-NEXT: vsetvli a1, zero, e32, mf2, ta, mu +; RV32-NEXT: vmulh.vx v9, v8, a0 +; RV32-NEXT: vsub.vv v9, v9, v8 +; RV32-NEXT: vsrl.vi v10, v9, 31 +; RV32-NEXT: vsra.vi v9, v9, 2 +; RV32-NEXT: vadd.vv v9, v9, v10 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv1i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 449390 +; RV64-NEXT: addiw a0, a0, -1171 +; RV64-NEXT: vsetvli a1, zero, e32, mf2, ta, mu +; RV64-NEXT: vmulh.vx v9, v8, a0 +; RV64-NEXT: vsub.vv v9, v9, v8 +; RV64-NEXT: vsra.vi v9, v9, 2 +; RV64-NEXT: vsrl.vi v10, v9, 31 +; RV64-NEXT: vadd.vv v9, v9, v10 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -599,19 +692,33 @@ } define @vrem_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vrem_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addiw a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: vsub.vv v9, v9, v8 -; CHECK-NEXT: vsra.vi v9, v9, 2 -; CHECK-NEXT: vsrl.vi v10, v9, 31 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv2i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 449390 +; RV32-NEXT: addi a0, a0, -1171 +; RV32-NEXT: vsetvli a1, zero, e32, m1, ta, mu +; RV32-NEXT: vmulh.vx v9, v8, a0 +; RV32-NEXT: vsub.vv v9, v9, v8 +; RV32-NEXT: vsrl.vi v10, v9, 31 +; RV32-NEXT: vsra.vi v9, v9, 2 +; RV32-NEXT: vadd.vv v9, v9, v10 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv2i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 449390 +; RV64-NEXT: addiw a0, a0, -1171 +; RV64-NEXT: vsetvli a1, zero, e32, m1, ta, mu +; RV64-NEXT: vmulh.vx v9, v8, a0 +; RV64-NEXT: vsub.vv v9, v9, v8 +; RV64-NEXT: vsra.vi v9, v9, 2 +; RV64-NEXT: vsrl.vi v10, v9, 31 +; RV64-NEXT: vadd.vv v9, v9, v10 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -641,19 +748,33 @@ } define @vrem_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vrem_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addiw a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmulh.vx v10, v8, a0 -; CHECK-NEXT: vsub.vv v10, v10, v8 -; CHECK-NEXT: vsra.vi v10, v10, 2 -; CHECK-NEXT: vsrl.vi v12, v10, 31 -; CHECK-NEXT: vadd.vv v10, v10, v12 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv4i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 449390 +; RV32-NEXT: addi a0, a0, -1171 +; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vmulh.vx v10, v8, a0 +; RV32-NEXT: vsub.vv v10, v10, v8 +; RV32-NEXT: vsrl.vi v12, v10, 31 +; RV32-NEXT: vsra.vi v10, v10, 2 +; RV32-NEXT: vadd.vv v10, v10, v12 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v10 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv4i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 449390 +; RV64-NEXT: addiw a0, a0, -1171 +; RV64-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV64-NEXT: vmulh.vx v10, v8, a0 +; RV64-NEXT: vsub.vv v10, v10, v8 +; RV64-NEXT: vsra.vi v10, v10, 2 +; RV64-NEXT: vsrl.vi v12, v10, 31 +; RV64-NEXT: vadd.vv v10, v10, v12 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v10 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -683,19 +804,33 @@ } define @vrem_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vrem_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addiw a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmulh.vx v12, v8, a0 -; CHECK-NEXT: vsub.vv v12, v12, v8 -; CHECK-NEXT: vsra.vi v12, v12, 2 -; CHECK-NEXT: vsrl.vi v16, v12, 31 -; CHECK-NEXT: vadd.vv v12, v12, v16 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv8i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 449390 +; RV32-NEXT: addi a0, a0, -1171 +; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu +; RV32-NEXT: vmulh.vx v12, v8, a0 +; RV32-NEXT: vsub.vv v12, v12, v8 +; RV32-NEXT: vsrl.vi v16, v12, 31 +; RV32-NEXT: vsra.vi v12, v12, 2 +; RV32-NEXT: vadd.vv v12, v12, v16 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v12 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv8i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 449390 +; RV64-NEXT: addiw a0, a0, -1171 +; RV64-NEXT: vsetvli a1, zero, e32, m4, ta, mu +; RV64-NEXT: vmulh.vx v12, v8, a0 +; RV64-NEXT: vsub.vv v12, v12, v8 +; RV64-NEXT: vsra.vi v12, v12, 2 +; RV64-NEXT: vsrl.vi v16, v12, 31 +; RV64-NEXT: vadd.vv v12, v12, v16 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v12 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -725,19 +860,33 @@ } define @vrem_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vrem_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 449390 -; CHECK-NEXT: addiw a0, a0, -1171 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: vsub.vv v16, v16, v8 -; CHECK-NEXT: vsra.vi v16, v16, 2 -; CHECK-NEXT: vsrl.vi v24, v16, 31 -; CHECK-NEXT: vadd.vv v16, v16, v24 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv16i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 449390 +; RV32-NEXT: addi a0, a0, -1171 +; RV32-NEXT: vsetvli a1, zero, e32, m8, ta, mu +; RV32-NEXT: vmulh.vx v16, v8, a0 +; RV32-NEXT: vsub.vv v16, v16, v8 +; RV32-NEXT: vsrl.vi v24, v16, 31 +; RV32-NEXT: vsra.vi v16, v16, 2 +; RV32-NEXT: vadd.vv v16, v16, v24 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv16i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 449390 +; RV64-NEXT: addiw a0, a0, -1171 +; RV64-NEXT: vsetvli a1, zero, e32, m8, ta, mu +; RV64-NEXT: vmulh.vx v16, v8, a0 +; RV64-NEXT: vsub.vv v16, v16, v8 +; RV64-NEXT: vsra.vi v16, v16, 2 +; RV64-NEXT: vsrl.vi v24, v16, 31 +; RV64-NEXT: vadd.vv v16, v16, v24 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v16 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -755,11 +904,24 @@ } define @vrem_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vrem_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vrem.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vrem.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -767,25 +929,48 @@ } define @vrem_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vrem_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1029851 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmulh.vx v9, v8, a0 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v10, v9, a0 -; CHECK-NEXT: vsra.vi v9, v9, 1 -; CHECK-NEXT: vadd.vv v9, v9, v10 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv1i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 748983 +; RV32-NEXT: addi a0, a0, -586 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: lui a0, 898779 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vmulh.vv v9, v8, v9 +; RV32-NEXT: addi a0, zero, 63 +; RV32-NEXT: vsrl.vx v10, v9, a0 +; RV32-NEXT: vsra.vi v9, v9, 1 +; RV32-NEXT: vadd.vv v9, v9, v10 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv1i64_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1029851 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vmulh.vx v9, v8, a0 +; RV64-NEXT: addi a0, zero, 63 +; RV64-NEXT: vsrl.vx v10, v9, a0 +; RV64-NEXT: vsra.vi v9, v9, 1 +; RV64-NEXT: vadd.vv v9, v9, v10 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -803,11 +988,24 @@ } define @vrem_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vrem_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vrem.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vrem.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -815,25 +1013,48 @@ } define @vrem_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vrem_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1029851 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmulh.vx v10, v8, a0 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v12, v10, a0 -; CHECK-NEXT: vsra.vi v10, v10, 1 -; CHECK-NEXT: vadd.vv v10, v10, v12 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv2i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 748983 +; RV32-NEXT: addi a0, a0, -586 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: lui a0, 898779 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vmulh.vv v10, v8, v10 +; RV32-NEXT: addi a0, zero, 63 +; RV32-NEXT: vsrl.vx v12, v10, a0 +; RV32-NEXT: vsra.vi v10, v10, 1 +; RV32-NEXT: vadd.vv v10, v10, v12 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv2i64_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1029851 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vmulh.vx v10, v8, a0 +; RV64-NEXT: addi a0, zero, 63 +; RV64-NEXT: vsrl.vx v12, v10, a0 +; RV64-NEXT: vsra.vi v10, v10, 1 +; RV64-NEXT: vadd.vv v10, v10, v12 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v10 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -851,11 +1072,24 @@ } define @vrem_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vrem_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vrem.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vrem.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -863,25 +1097,48 @@ } define @vrem_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vrem_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1029851 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmulh.vx v12, v8, a0 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v16, v12, a0 -; CHECK-NEXT: vsra.vi v12, v12, 1 -; CHECK-NEXT: vadd.vv v12, v12, v16 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv4i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 748983 +; RV32-NEXT: addi a0, a0, -586 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: lui a0, 898779 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vmulh.vv v12, v8, v12 +; RV32-NEXT: addi a0, zero, 63 +; RV32-NEXT: vsrl.vx v16, v12, a0 +; RV32-NEXT: vsra.vi v12, v12, 1 +; RV32-NEXT: vadd.vv v12, v12, v16 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv4i64_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1029851 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vmulh.vx v12, v8, a0 +; RV64-NEXT: addi a0, zero, 63 +; RV64-NEXT: vsrl.vx v16, v12, a0 +; RV64-NEXT: vsra.vi v12, v12, 1 +; RV64-NEXT: vadd.vv v12, v12, v16 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v12 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -899,11 +1156,24 @@ } define @vrem_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vrem_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vrem.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vrem.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vrem.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat @@ -911,25 +1181,48 @@ } define @vrem_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vrem_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 1029851 -; CHECK-NEXT: addiw a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: slli a0, a0, 12 -; CHECK-NEXT: addi a0, a0, 1755 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: addi a0, zero, 63 -; CHECK-NEXT: vsrl.vx v24, v16, a0 -; CHECK-NEXT: vsra.vi v16, v16, 1 -; CHECK-NEXT: vadd.vv v16, v16, v24 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret +; RV32-LABEL: vrem_vi_nxv8i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 748983 +; RV32-NEXT: addi a0, a0, -586 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: lui a0, 898779 +; RV32-NEXT: addi a0, a0, 1755 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vmulh.vv v16, v8, v16 +; RV32-NEXT: addi a0, zero, 63 +; RV32-NEXT: vsrl.vx v24, v16, a0 +; RV32-NEXT: vsra.vi v16, v16, 1 +; RV32-NEXT: vadd.vv v16, v16, v24 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrem_vi_nxv8i64_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 1029851 +; RV64-NEXT: addiw a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: slli a0, a0, 12 +; RV64-NEXT: addi a0, a0, 1755 +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vmulh.vx v16, v8, a0 +; RV64-NEXT: addi a0, zero, 63 +; RV64-NEXT: vsrl.vx v24, v16, a0 +; RV64-NEXT: vsra.vi v16, v16, 1 +; RV64-NEXT: vadd.vv v16, v16, v24 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v16 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = srem %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vremu-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vremu-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vremu-sdnode-rv32.ll +++ /dev/null @@ -1,1037 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vremu_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vremu_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vremu_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 5 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vremu_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vremu_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 5 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vremu_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vremu_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 5 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vremu_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vremu_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 5 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vremu_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vremu_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v10, v8, a0 -; CHECK-NEXT: vsrl.vi v10, v10, 5 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vremu_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vremu_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v12, v8, a0 -; CHECK-NEXT: vsrl.vi v12, v12, 5 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vremu_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vremu_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 33 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v16, v8, a0 -; CHECK-NEXT: vsrl.vi v16, v16, 5 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vremu_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vremu_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vremu_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vremu_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v10, v8, a0 -; CHECK-NEXT: vsrl.vi v10, v10, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vremu_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v12, v8, a0 -; CHECK-NEXT: vsrl.vi v12, v12, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vremu_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v16, v8, a0 -; CHECK-NEXT: vsrl.vi v16, v16, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vremu_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vremu_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 29 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vremu_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vremu_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 29 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vremu_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vremu_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v10, v8, a0 -; CHECK-NEXT: vsrl.vi v10, v10, 29 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vremu_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vremu_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v12, v8, a0 -; CHECK-NEXT: vsrl.vi v12, v12, 29 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vremu_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vremu_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v16, v8, a0 -; CHECK-NEXT: vsrl.vi v16, v16, 29 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vremu_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vremu.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vremu_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vmulhu.vv v9, v8, v9 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v9, v9, a0 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -; fold (urem x, pow2) -> (and x, pow2-1) -define @vremu_vi_nxv1i64_1( %va) { -; CHECK-LABEL: vremu_vi_nxv1i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -; fold (urem x, (shl pow2, y)) -> (and x, (add (shl pow2, y), -1)) -define @vremu_vi_nxv1i64_2( %va, %vb) { -; CHECK-LABEL: vremu_vi_nxv1i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmv.v.x v10, a0 -; CHECK-NEXT: vsll.vv v9, v10, v9 -; CHECK-NEXT: vadd.vi v9, v9, -1 -; CHECK-NEXT: vand.vv v8, v8, v9 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %splat, %vb - %vd = urem %va, %vc - ret %vd -} - -define @vremu_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vremu_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vremu.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vremu_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vmulhu.vv v10, v8, v10 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v10, v10, a0 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -; fold (urem x, pow2) -> (and x, pow2-1) -define @vremu_vi_nxv2i64_1( %va) { -; CHECK-LABEL: vremu_vi_nxv2i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -; fold (urem x, (shl pow2, y)) -> (and x, (add (shl pow2, y), -1)) -define @vremu_vi_nxv2i64_2( %va, %vb) { -; CHECK-LABEL: vremu_vi_nxv2i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmv.v.x v12, a0 -; CHECK-NEXT: vsll.vv v10, v12, v10 -; CHECK-NEXT: vadd.vi v10, v10, -1 -; CHECK-NEXT: vand.vv v8, v8, v10 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %splat, %vb - %vd = urem %va, %vc - ret %vd -} - -define @vremu_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vremu_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vremu.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vremu_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vmulhu.vv v12, v8, v12 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v12, v12, a0 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -; fold (urem x, pow2) -> (and x, pow2-1) -define @vremu_vi_nxv4i64_1( %va) { -; CHECK-LABEL: vremu_vi_nxv4i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -;fold (urem x, (shl pow2, y)) -> (and x, (add (shl pow2, y), -1)) -define @vremu_vi_nxv4i64_2( %va, %vb) { -; CHECK-LABEL: vremu_vi_nxv4i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmv.v.x v16, a0 -; CHECK-NEXT: vsll.vv v12, v16, v12 -; CHECK-NEXT: vadd.vi v12, v12, -1 -; CHECK-NEXT: vand.vv v8, v8, v12 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %splat, %vb - %vd = urem %va, %vc - ret %vd -} - -define @vremu_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vremu_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vremu.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = urem %va, %vb - ret %vc -} - -define @vremu_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vremu_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vremu.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -define @vremu_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vremu_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: sw a0, 12(sp) -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vmulhu.vv v16, v8, v16 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v16, v16, a0 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -7, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -; fold (urem x, pow2) -> (and x, pow2-1) -define @vremu_vi_nxv8i64_1( %va) { -; CHECK-LABEL: vremu_vi_nxv8i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vand.vi v8, v8, 15 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = urem %va, %splat - ret %vc -} - -; fold (urem x, (shl pow2, y)) -> (and x, (add (shl pow2, y), -1)) -define @vremu_vi_nxv8i64_2( %va, %vb) { -; CHECK-LABEL: vremu_vi_nxv8i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmv.v.x v24, a0 -; CHECK-NEXT: vsll.vv v16, v24, v16 -; CHECK-NEXT: vadd.vi v16, v16, -1 -; CHECK-NEXT: vand.vv v8, v8, v16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %splat, %vb - %vd = urem %va, %vc - ret %vd -} diff --git a/llvm/test/CodeGen/RISCV/rvv/vremu-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vremu-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vremu-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vremu-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vremu-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vremu-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vremu_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vremu_vv_nxv1i8: @@ -290,16 +291,27 @@ } define @vremu_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv1i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, mf4, ta, mu +; RV32-NEXT: vmulhu.vx v9, v8, a0 +; RV32-NEXT: vsrl.vi v9, v9, 13 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv1i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, mf4, ta, mu +; RV64-NEXT: vmulhu.vx v9, v8, a0 +; RV64-NEXT: vsrl.vi v9, v9, 13 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -329,16 +341,27 @@ } define @vremu_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv2i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, mf2, ta, mu +; RV32-NEXT: vmulhu.vx v9, v8, a0 +; RV32-NEXT: vsrl.vi v9, v9, 13 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv2i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, mf2, ta, mu +; RV64-NEXT: vmulhu.vx v9, v8, a0 +; RV64-NEXT: vsrl.vi v9, v9, 13 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -368,16 +391,27 @@ } define @vremu_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv4i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, m1, ta, mu +; RV32-NEXT: vmulhu.vx v9, v8, a0 +; RV32-NEXT: vsrl.vi v9, v9, 13 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv4i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, m1, ta, mu +; RV64-NEXT: vmulhu.vx v9, v8, a0 +; RV64-NEXT: vsrl.vi v9, v9, 13 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -407,16 +441,27 @@ } define @vremu_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v10, v8, a0 -; CHECK-NEXT: vsrl.vi v10, v10, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv8i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, m2, ta, mu +; RV32-NEXT: vmulhu.vx v10, v8, a0 +; RV32-NEXT: vsrl.vi v10, v10, 13 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v10 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv8i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, m2, ta, mu +; RV64-NEXT: vmulhu.vx v10, v8, a0 +; RV64-NEXT: vsrl.vi v10, v10, 13 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v10 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -446,16 +491,27 @@ } define @vremu_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v12, v8, a0 -; CHECK-NEXT: vsrl.vi v12, v12, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv16i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, m4, ta, mu +; RV32-NEXT: vmulhu.vx v12, v8, a0 +; RV32-NEXT: vsrl.vi v12, v12, 13 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v12 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv16i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, m4, ta, mu +; RV64-NEXT: vmulhu.vx v12, v8, a0 +; RV64-NEXT: vsrl.vi v12, v12, 13 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v12 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -485,16 +541,27 @@ } define @vremu_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vremu_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 2 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v16, v8, a0 -; CHECK-NEXT: vsrl.vi v16, v16, 13 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv32i16_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 2 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e16, m8, ta, mu +; RV32-NEXT: vmulhu.vx v16, v8, a0 +; RV32-NEXT: vsrl.vi v16, v16, 13 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v16 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv32i16_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 2 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e16, m8, ta, mu +; RV64-NEXT: vmulhu.vx v16, v8, a0 +; RV64-NEXT: vsrl.vi v16, v16, 13 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v16 +; RV64-NEXT: ret %head = insertelement undef, i16 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -524,16 +591,27 @@ } define @vremu_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vremu_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 29 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv1i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e32, mf2, ta, mu +; RV32-NEXT: vmulhu.vx v9, v8, a0 +; RV32-NEXT: vsrl.vi v9, v9, 29 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv1i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 131072 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e32, mf2, ta, mu +; RV64-NEXT: vmulhu.vx v9, v8, a0 +; RV64-NEXT: vsrl.vi v9, v9, 29 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -563,16 +641,27 @@ } define @vremu_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vremu_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: vsrl.vi v9, v9, 29 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv2i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e32, m1, ta, mu +; RV32-NEXT: vmulhu.vx v9, v8, a0 +; RV32-NEXT: vsrl.vi v9, v9, 29 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv2i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 131072 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e32, m1, ta, mu +; RV64-NEXT: vmulhu.vx v9, v8, a0 +; RV64-NEXT: vsrl.vi v9, v9, 29 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -602,16 +691,27 @@ } define @vremu_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vremu_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v10, v8, a0 -; CHECK-NEXT: vsrl.vi v10, v10, 29 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv4i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vmulhu.vx v10, v8, a0 +; RV32-NEXT: vsrl.vi v10, v10, 29 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v10 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv4i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 131072 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV64-NEXT: vmulhu.vx v10, v8, a0 +; RV64-NEXT: vsrl.vi v10, v10, 29 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v10 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -641,16 +741,27 @@ } define @vremu_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vremu_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v12, v8, a0 -; CHECK-NEXT: vsrl.vi v12, v12, 29 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv8i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu +; RV32-NEXT: vmulhu.vx v12, v8, a0 +; RV32-NEXT: vsrl.vi v12, v12, 29 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v12 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv8i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 131072 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e32, m4, ta, mu +; RV64-NEXT: vmulhu.vx v12, v8, a0 +; RV64-NEXT: vsrl.vi v12, v12, 29 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v12 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -680,16 +791,27 @@ } define @vremu_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vremu_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: lui a0, 131072 -; CHECK-NEXT: addiw a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v16, v8, a0 -; CHECK-NEXT: vsrl.vi v16, v16, 29 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv16i32_0: +; RV32: # %bb.0: +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: addi a0, a0, 1 +; RV32-NEXT: vsetvli a1, zero, e32, m8, ta, mu +; RV32-NEXT: vmulhu.vx v16, v8, a0 +; RV32-NEXT: vsrl.vi v16, v16, 29 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v16 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv16i32_0: +; RV64: # %bb.0: +; RV64-NEXT: lui a0, 131072 +; RV64-NEXT: addiw a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e32, m8, ta, mu +; RV64-NEXT: vmulhu.vx v16, v8, a0 +; RV64-NEXT: vsrl.vi v16, v16, 29 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v16 +; RV64-NEXT: ret %head = insertelement undef, i32 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -707,11 +829,24 @@ } define @vremu_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vremu_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vremu.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vremu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -719,18 +854,37 @@ } define @vremu_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vremu_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: slli a0, a0, 61 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vmulhu.vx v9, v8, a0 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v9, v9, a0 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v9 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv1i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: addi a0, zero, 1 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vmulhu.vv v9, v8, v9 +; RV32-NEXT: addi a0, zero, 61 +; RV32-NEXT: vsrl.vx v9, v9, a0 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv1i64_0: +; RV64: # %bb.0: +; RV64-NEXT: addi a0, zero, 1 +; RV64-NEXT: slli a0, a0, 61 +; RV64-NEXT: addi a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vmulhu.vx v9, v8, a0 +; RV64-NEXT: addi a0, zero, 61 +; RV64-NEXT: vsrl.vx v9, v9, a0 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v9 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -779,11 +933,24 @@ } define @vremu_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vremu_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vremu.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vremu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -791,18 +958,37 @@ } define @vremu_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vremu_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: slli a0, a0, 61 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vmulhu.vx v10, v8, a0 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v10, v10, a0 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v10 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv2i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: addi a0, zero, 1 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vmulhu.vv v10, v8, v10 +; RV32-NEXT: addi a0, zero, 61 +; RV32-NEXT: vsrl.vx v10, v10, a0 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv2i64_0: +; RV64: # %bb.0: +; RV64-NEXT: addi a0, zero, 1 +; RV64-NEXT: slli a0, a0, 61 +; RV64-NEXT: addi a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vmulhu.vx v10, v8, a0 +; RV64-NEXT: addi a0, zero, 61 +; RV64-NEXT: vsrl.vx v10, v10, a0 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v10 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -851,11 +1037,24 @@ } define @vremu_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vremu_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vremu.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vremu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -863,18 +1062,37 @@ } define @vremu_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vremu_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: slli a0, a0, 61 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vmulhu.vx v12, v8, a0 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v12, v12, a0 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v12 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv4i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: addi a0, zero, 1 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vmulhu.vv v12, v8, v12 +; RV32-NEXT: addi a0, zero, 61 +; RV32-NEXT: vsrl.vx v12, v12, a0 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv4i64_0: +; RV64: # %bb.0: +; RV64-NEXT: addi a0, zero, 1 +; RV64-NEXT: slli a0, a0, 61 +; RV64-NEXT: addi a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vmulhu.vx v12, v8, a0 +; RV64-NEXT: addi a0, zero, 61 +; RV64-NEXT: vsrl.vx v12, v12, a0 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v12 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -923,11 +1141,24 @@ } define @vremu_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vremu_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vremu.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vremu.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vremu.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat @@ -935,18 +1166,37 @@ } define @vremu_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vremu_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: slli a0, a0, 61 -; CHECK-NEXT: addi a0, a0, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vmulhu.vx v16, v8, a0 -; CHECK-NEXT: addi a0, zero, 61 -; CHECK-NEXT: vsrl.vx v16, v16, a0 -; CHECK-NEXT: addi a0, zero, -7 -; CHECK-NEXT: vnmsac.vx v8, a0, v16 -; CHECK-NEXT: ret +; RV32-LABEL: vremu_vi_nxv8i64_0: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: lui a0, 131072 +; RV32-NEXT: sw a0, 12(sp) +; RV32-NEXT: addi a0, zero, 1 +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vmulhu.vv v16, v8, v16 +; RV32-NEXT: addi a0, zero, 61 +; RV32-NEXT: vsrl.vx v16, v16, a0 +; RV32-NEXT: addi a0, zero, -7 +; RV32-NEXT: vnmsac.vx v8, a0, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vremu_vi_nxv8i64_0: +; RV64: # %bb.0: +; RV64-NEXT: addi a0, zero, 1 +; RV64-NEXT: slli a0, a0, 61 +; RV64-NEXT: addi a0, a0, 1 +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vmulhu.vx v16, v8, a0 +; RV64-NEXT: addi a0, zero, 61 +; RV64-NEXT: vsrl.vx v16, v16, a0 +; RV64-NEXT: addi a0, zero, -7 +; RV64-NEXT: vnmsac.vx v8, a0, v16 +; RV64-NEXT: ret %head = insertelement undef, i64 -7, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = urem %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vrsub-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vrsub-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vrsub-sdnode-rv32.ll +++ /dev/null @@ -1,559 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vrsub_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vrsub_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vrsub_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vrsub_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vrsub_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vrsub_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vrsub_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vrsub_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vsub.vv v8, v9, v8 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vrsub_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vsub.vv v8, v10, v8 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vrsub_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vsub.vv v8, v12, v8 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vrsub_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vsub.vv v8, v16, v8 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - -define @vrsub_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vrsub_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vrsub.vi v8, v8, -4 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -4, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %splat, %va - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vrsub-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vrsub-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vrsub-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vrsub-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vrsub-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vrsub-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vrsub_vx_nxv1i8( %va, i8 signext %b) { ; CHECK-LABEL: vrsub_vx_nxv1i8: @@ -434,11 +435,24 @@ } define @vrsub_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vrsub_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vrsub_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vsub.vv v8, v9, v8 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrsub_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vrsub.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sub %splat, %va @@ -458,11 +472,24 @@ } define @vrsub_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vrsub_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vrsub_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vsub.vv v8, v10, v8 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrsub_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vrsub.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sub %splat, %va @@ -482,11 +509,24 @@ } define @vrsub_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vrsub_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vrsub_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vsub.vv v8, v12, v8 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrsub_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vrsub.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sub %splat, %va @@ -506,11 +546,24 @@ } define @vrsub_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vrsub_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vrsub.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vrsub_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vsub.vv v8, v16, v8 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vrsub_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vrsub.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sub %splat, %va diff --git a/llvm/test/CodeGen/RISCV/rvv/vshl-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vshl-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vshl-sdnode-rv32.ll +++ /dev/null @@ -1,630 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vshl_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vshl_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv1i8_0( %va) { -; CHECK-LABEL: vshl_vx_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vshl_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv2i8_0( %va) { -; CHECK-LABEL: vshl_vx_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vshl_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv4i8_0( %va) { -; CHECK-LABEL: vshl_vx_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vshl_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv8i8_0( %va) { -; CHECK-LABEL: vshl_vx_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vshl_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv16i8_0( %va) { -; CHECK-LABEL: vshl_vx_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vshl_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv32i8_0( %va) { -; CHECK-LABEL: vshl_vx_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vshl_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv64i8_0( %va) { -; CHECK-LABEL: vshl_vx_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vshl_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv1i16_0( %va) { -; CHECK-LABEL: vshl_vx_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vshl_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv2i16_0( %va) { -; CHECK-LABEL: vshl_vx_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vshl_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv4i16_0( %va) { -; CHECK-LABEL: vshl_vx_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vshl_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv8i16_0( %va) { -; CHECK-LABEL: vshl_vx_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vshl_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv16i16_0( %va) { -; CHECK-LABEL: vshl_vx_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vshl_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv32i16_0( %va) { -; CHECK-LABEL: vshl_vx_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vshl_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv1i32_0( %va) { -; CHECK-LABEL: vshl_vx_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vshl_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv2i32_0( %va) { -; CHECK-LABEL: vshl_vx_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vshl_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv4i32_0( %va) { -; CHECK-LABEL: vshl_vx_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vshl_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv8i32_0( %va) { -; CHECK-LABEL: vshl_vx_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vshl_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv16i32_0( %va) { -; CHECK-LABEL: vshl_vx_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vshl_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv1i64_0( %va) { -; CHECK-LABEL: vshl_vx_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv1i64_1( %va) { -; CHECK-LABEL: vshl_vx_nxv1i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv1i64_2( %va) { -; CHECK-LABEL: vshl_vx_nxv1i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vadd.vv v8, v8, v8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vshl_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv2i64_0( %va) { -; CHECK-LABEL: vshl_vx_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv2i64_1( %va) { -; CHECK-LABEL: vshl_vx_nxv2i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv2i64_2( %va) { -; CHECK-LABEL: vshl_vx_nxv2i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vadd.vv v8, v8, v8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vshl_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv4i64_0( %va) { -; CHECK-LABEL: vshl_vx_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv4i64_1( %va) { -; CHECK-LABEL: vshl_vx_nxv4i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv4i64_2( %va) { -; CHECK-LABEL: vshl_vx_nxv4i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vadd.vv v8, v8, v8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vshl_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv8i64_0( %va) { -; CHECK-LABEL: vshl_vx_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vsll.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv8i64_1( %va) { -; CHECK-LABEL: vshl_vx_nxv8i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vsll.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} - -define @vshl_vx_nxv8i64_2( %va) { -; CHECK-LABEL: vshl_vx_nxv8i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vadd.vv v8, v8, v8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = shl %va, %splat - ret %vc -} diff --git a/llvm/test/CodeGen/RISCV/rvv/vshl-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vshl-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vshl-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vshl-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vshl-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vshl-sdnode.ll @@ -1,4 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s ; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s define @vshl_vx_nxv1i8( %va, i8 signext %b) { diff --git a/llvm/test/CodeGen/RISCV/rvv/vsra-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vsra-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vsra-sdnode-rv32.ll +++ /dev/null @@ -1,803 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vsra_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vsra_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vsra_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vsra_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vsra_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vsra_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vsra_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vsra_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vsra_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vsra_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vsra_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vsra_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vsra_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vsra_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vsra_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vsra_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vsra_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vsra_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vsra_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vsra_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vsra_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vsra_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vsra_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vsra_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vsra_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vsra_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vsra_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vsra_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vsra_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vsra_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vsra_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vsra_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vsra_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vsra_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vsra_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vsra_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vsra_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vsra_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vsra_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv1i64_1( %va) { -; CHECK-LABEL: vsra_vi_nxv1i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vsra_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vsra_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv2i64_1( %va) { -; CHECK-LABEL: vsra_vi_nxv2i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vsra_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vsra_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv4i64_1( %va) { -; CHECK-LABEL: vsra_vi_nxv4i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vsra_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vsra.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = ashr %va, %vb - ret %vc -} - -define @vsra_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vsra_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vsra_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vsra.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - -define @vsra_vi_nxv8i64_1( %va) { -; CHECK-LABEL: vsra_vi_nxv8i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vsra.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = ashr %va, %splat - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vsra-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vsra-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vsra-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vsra-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsra-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsra-sdnode.ll @@ -1,4 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s ; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s define @vsra_vv_nxv1i8( %va, %vb) { diff --git a/llvm/test/CodeGen/RISCV/rvv/vsrl-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vsrl-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vsrl-sdnode-rv32.ll +++ /dev/null @@ -1,583 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vsrl_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv1i8_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv2i8_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv4i8_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv8i8_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv16i8_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv32i8_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv64i8_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i8 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv1i16_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv2i16_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv4i16_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv8i16_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv16i16_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vsrl_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv32i16_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 6 -; CHECK-NEXT: ret - %head = insertelement undef, i16 6, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vsrl_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv1i32_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vsrl_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv2i32_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vsrl_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv4i32_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vsrl_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv8i32_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vsrl_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv16i32_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i32 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vsrl_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv1i64_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv1i64_1( %va) { -; CHECK-LABEL: vsrl_vx_nxv1i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vsrl_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv2i64_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv2i64_1( %va) { -; CHECK-LABEL: vsrl_vx_nxv2i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vsrl_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv4i64_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv4i64_1( %va) { -; CHECK-LABEL: vsrl_vx_nxv4i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vsrl_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv8i64_0( %va) { -; CHECK-LABEL: vsrl_vx_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vsrl.vi v8, v8, 31 -; CHECK-NEXT: ret - %head = insertelement undef, i64 31, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - -define @vsrl_vx_nxv8i64_1( %va) { -; CHECK-LABEL: vsrl_vx_nxv8i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 32 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vsrl.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 32, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = lshr %va, %splat - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vsrl-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vsrl-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vsrl-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vsrl-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsrl-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsrl-sdnode.ll @@ -1,4 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s ; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s define @vsrl_vx_nxv1i8( %va, i8 signext %b) { diff --git a/llvm/test/CodeGen/RISCV/rvv/vsub-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vsub-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vsub-sdnode-rv32.ll +++ /dev/null @@ -1,816 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vsub_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vsub_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv1i8_0( %va) { -; CHECK-LABEL: vsub_vx_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -; Test constant subs to see if we can optimize them away for scalable vectors. -define @vsub_ii_nxv1i8_1() { -; CHECK-LABEL: vsub_ii_nxv1i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vmv.v.i v8, -1 -; CHECK-NEXT: ret - %heada = insertelement undef, i8 2, i32 0 - %splata = shufflevector %heada, undef, zeroinitializer - %headb = insertelement undef, i8 3, i32 0 - %splatb = shufflevector %headb, undef, zeroinitializer - %vc = sub %splata, %splatb - ret %vc -} - -define @vsub_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vsub_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv2i8_0( %va) { -; CHECK-LABEL: vsub_vx_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vsub_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv4i8_0( %va) { -; CHECK-LABEL: vsub_vx_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vsub_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv8i8_0( %va) { -; CHECK-LABEL: vsub_vx_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vsub_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv16i8_0( %va) { -; CHECK-LABEL: vsub_vx_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vsub_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv32i8_0( %va) { -; CHECK-LABEL: vsub_vx_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vsub_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv64i8_0( %va) { -; CHECK-LABEL: vsub_vx_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vsub_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv1i16_0( %va) { -; CHECK-LABEL: vsub_vx_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vsub_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv2i16_0( %va) { -; CHECK-LABEL: vsub_vx_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vsub_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv4i16_0( %va) { -; CHECK-LABEL: vsub_vx_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vsub_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv8i16_0( %va) { -; CHECK-LABEL: vsub_vx_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vsub_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv16i16_0( %va) { -; CHECK-LABEL: vsub_vx_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vsub_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv32i16_0( %va) { -; CHECK-LABEL: vsub_vx_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vsub_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv1i32_0( %va) { -; CHECK-LABEL: vsub_vx_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vsub_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv2i32_0( %va) { -; CHECK-LABEL: vsub_vx_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vsub_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv4i32_0( %va) { -; CHECK-LABEL: vsub_vx_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vsub_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv8i32_0( %va) { -; CHECK-LABEL: vsub_vx_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vsub_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv16i32_0( %va) { -; CHECK-LABEL: vsub_vx_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vsub_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vsub.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv1i64_0( %va) { -; CHECK-LABEL: vsub_vx_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vsub_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vsub.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv2i64_0( %va) { -; CHECK-LABEL: vsub_vx_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vsub_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vsub.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv4i64_0( %va) { -; CHECK-LABEL: vsub_vx_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vsub_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vsub.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = sub %va, %vb - ret %vc -} - -define @vsub_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vsub_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vsub.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - -define @vsub_vx_nxv8i64_0( %va) { -; CHECK-LABEL: vsub_vx_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 1 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = sub %va, %splat - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vsub-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vsub-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vsub-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vsub-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsub-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsub-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vsub_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vsub_vv_nxv1i8: @@ -657,11 +658,24 @@ } define @vsub_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vsub_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vsub_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vsub.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vsub_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vsub.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sub %va, %splat @@ -692,11 +706,24 @@ } define @vsub_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vsub_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vsub_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vsub.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vsub_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vsub.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sub %va, %splat @@ -727,11 +754,24 @@ } define @vsub_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vsub_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vsub_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vsub.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vsub_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vsub.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sub %va, %splat @@ -762,11 +802,24 @@ } define @vsub_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vsub_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vsub.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vsub_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vsub.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vsub_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vsub.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = sub %va, %splat diff --git a/llvm/test/CodeGen/RISCV/rvv/vtruncs-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vtruncs-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vtruncs-sdnode-rv32.ll +++ /dev/null @@ -1,315 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vtrunc_nxv1i16_nxv1i8( %va) { -; CHECK-LABEL: vtrunc_nxv1i16_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv2i16_nxv2i8( %va) { -; CHECK-LABEL: vtrunc_nxv2i16_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv4i16_nxv4i8( %va) { -; CHECK-LABEL: vtrunc_nxv4i16_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv8i16_nxv8i8( %va) { -; CHECK-LABEL: vtrunc_nxv8i16_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v10, v8, 0 -; CHECK-NEXT: vmv1r.v v8, v10 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv16i16_nxv16i8( %va) { -; CHECK-LABEL: vtrunc_nxv16i16_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v12, v8, 0 -; CHECK-NEXT: vmv2r.v v8, v12 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv1i32_nxv1i8( %va) { -; CHECK-LABEL: vtrunc_nxv1i32_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv1i32_nxv1i16( %va) { -; CHECK-LABEL: vtrunc_nxv1i32_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv2i32_nxv2i8( %va) { -; CHECK-LABEL: vtrunc_nxv2i32_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv2i32_nxv2i16( %va) { -; CHECK-LABEL: vtrunc_nxv2i32_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv4i32_nxv4i8( %va) { -; CHECK-LABEL: vtrunc_nxv4i32_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v10, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv4i32_nxv4i16( %va) { -; CHECK-LABEL: vtrunc_nxv4i32_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v10, v8, 0 -; CHECK-NEXT: vmv1r.v v8, v10 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv8i32_nxv8i8( %va) { -; CHECK-LABEL: vtrunc_nxv8i32_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v12, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v12, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv8i32_nxv8i16( %va) { -; CHECK-LABEL: vtrunc_nxv8i32_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v12, v8, 0 -; CHECK-NEXT: vmv2r.v v8, v12 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv16i32_nxv16i8( %va) { -; CHECK-LABEL: vtrunc_nxv16i32_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vnsrl.wi v16, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v16, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv16i32_nxv16i16( %va) { -; CHECK-LABEL: vtrunc_nxv16i32_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vnsrl.wi v16, v8, 0 -; CHECK-NEXT: vmv4r.v v8, v16 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv1i64_nxv1i8( %va) { -; CHECK-LABEL: vtrunc_nxv1i64_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv1i64_nxv1i16( %va) { -; CHECK-LABEL: vtrunc_nxv1i64_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv1i64_nxv1i32( %va) { -; CHECK-LABEL: vtrunc_nxv1i64_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv2i64_nxv2i8( %va) { -; CHECK-LABEL: vtrunc_nxv2i64_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v10, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 0 -; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv2i64_nxv2i16( %va) { -; CHECK-LABEL: vtrunc_nxv2i64_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v10, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv2i64_nxv2i32( %va) { -; CHECK-LABEL: vtrunc_nxv2i64_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v10, v8, 0 -; CHECK-NEXT: vmv1r.v v8, v10 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv4i64_nxv4i8( %va) { -; CHECK-LABEL: vtrunc_nxv4i64_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v12, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v12, 0 -; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v8, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv4i64_nxv4i16( %va) { -; CHECK-LABEL: vtrunc_nxv4i64_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v12, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v12, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv4i64_nxv4i32( %va) { -; CHECK-LABEL: vtrunc_nxv4i64_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v12, v8, 0 -; CHECK-NEXT: vmv2r.v v8, v12 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv8i64_nxv8i8( %va) { -; CHECK-LABEL: vtrunc_nxv8i64_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vnsrl.wi v16, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v10, v16, 0 -; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv8i64_nxv8i16( %va) { -; CHECK-LABEL: vtrunc_nxv8i64_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vnsrl.wi v16, v8, 0 -; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v16, 0 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - -define @vtrunc_nxv8i64_nxv8i32( %va) { -; CHECK-LABEL: vtrunc_nxv8i64_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vnsrl.wi v16, v8, 0 -; CHECK-NEXT: vmv4r.v v8, v16 -; CHECK-NEXT: ret - %tvec = trunc %va to - ret %tvec -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vtruncs-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vtruncs-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vtruncs-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vtruncs-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vtruncs-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vtruncs-sdnode.ll @@ -1,4 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s ; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s define @vtrunc_nxv1i16_nxv1i8( %va) { diff --git a/llvm/test/CodeGen/RISCV/rvv/vxor-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vxor-sdnode-rv32.ll deleted file mode 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vxor-sdnode-rv32.ll +++ /dev/null @@ -1,1329 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s - -define @vxor_vv_nxv1i8( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv1i8( %va, i8 signext %b) { -; CHECK-LABEL: vxor_vx_nxv1i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i8_0( %va) { -; CHECK-LABEL: vxor_vi_nxv1i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i8_1( %va) { -; CHECK-LABEL: vxor_vi_nxv1i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i8_2( %va) { -; CHECK-LABEL: vxor_vi_nxv1i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv2i8( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv2i8( %va, i8 signext %b) { -; CHECK-LABEL: vxor_vx_nxv2i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i8_0( %va) { -; CHECK-LABEL: vxor_vi_nxv2i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i8_1( %va) { -; CHECK-LABEL: vxor_vi_nxv2i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i8_2( %va) { -; CHECK-LABEL: vxor_vi_nxv2i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv4i8( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv4i8( %va, i8 signext %b) { -; CHECK-LABEL: vxor_vx_nxv4i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i8_0( %va) { -; CHECK-LABEL: vxor_vi_nxv4i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i8_1( %va) { -; CHECK-LABEL: vxor_vi_nxv4i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i8_2( %va) { -; CHECK-LABEL: vxor_vi_nxv4i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv8i8( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv8i8( %va, i8 signext %b) { -; CHECK-LABEL: vxor_vx_nxv8i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i8_0( %va) { -; CHECK-LABEL: vxor_vi_nxv8i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i8_1( %va) { -; CHECK-LABEL: vxor_vi_nxv8i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i8_2( %va) { -; CHECK-LABEL: vxor_vi_nxv8i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv16i8( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv16i8( %va, i8 signext %b) { -; CHECK-LABEL: vxor_vx_nxv16i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv16i8_0( %va) { -; CHECK-LABEL: vxor_vi_nxv16i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv16i8_1( %va) { -; CHECK-LABEL: vxor_vi_nxv16i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv16i8_2( %va) { -; CHECK-LABEL: vxor_vi_nxv16i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv32i8( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv32i8( %va, i8 signext %b) { -; CHECK-LABEL: vxor_vx_nxv32i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv32i8_0( %va) { -; CHECK-LABEL: vxor_vi_nxv32i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv32i8_1( %va) { -; CHECK-LABEL: vxor_vi_nxv32i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv32i8_2( %va) { -; CHECK-LABEL: vxor_vi_nxv32i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv64i8( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv64i8( %va, i8 signext %b) { -; CHECK-LABEL: vxor_vx_nxv64i8: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv64i8_0( %va) { -; CHECK-LABEL: vxor_vi_nxv64i8_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i8 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv64i8_1( %va) { -; CHECK-LABEL: vxor_vi_nxv64i8_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i8 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv64i8_2( %va) { -; CHECK-LABEL: vxor_vi_nxv64i8_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i8 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv1i16( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv1i16( %va, i16 signext %b) { -; CHECK-LABEL: vxor_vx_nxv1i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i16_0( %va) { -; CHECK-LABEL: vxor_vi_nxv1i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i16_1( %va) { -; CHECK-LABEL: vxor_vi_nxv1i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i16_2( %va) { -; CHECK-LABEL: vxor_vi_nxv1i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv2i16( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv2i16( %va, i16 signext %b) { -; CHECK-LABEL: vxor_vx_nxv2i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i16_0( %va) { -; CHECK-LABEL: vxor_vi_nxv2i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i16_1( %va) { -; CHECK-LABEL: vxor_vi_nxv2i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i16_2( %va) { -; CHECK-LABEL: vxor_vi_nxv2i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv4i16( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv4i16( %va, i16 signext %b) { -; CHECK-LABEL: vxor_vx_nxv4i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i16_0( %va) { -; CHECK-LABEL: vxor_vi_nxv4i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i16_1( %va) { -; CHECK-LABEL: vxor_vi_nxv4i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i16_2( %va) { -; CHECK-LABEL: vxor_vi_nxv4i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv8i16( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv8i16( %va, i16 signext %b) { -; CHECK-LABEL: vxor_vx_nxv8i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i16_0( %va) { -; CHECK-LABEL: vxor_vi_nxv8i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i16_1( %va) { -; CHECK-LABEL: vxor_vi_nxv8i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i16_2( %va) { -; CHECK-LABEL: vxor_vi_nxv8i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv16i16( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv16i16( %va, i16 signext %b) { -; CHECK-LABEL: vxor_vx_nxv16i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv16i16_0( %va) { -; CHECK-LABEL: vxor_vi_nxv16i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv16i16_1( %va) { -; CHECK-LABEL: vxor_vi_nxv16i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv16i16_2( %va) { -; CHECK-LABEL: vxor_vi_nxv16i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv32i16( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv32i16( %va, i16 signext %b) { -; CHECK-LABEL: vxor_vx_nxv32i16: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv32i16_0( %va) { -; CHECK-LABEL: vxor_vi_nxv32i16_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i16 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv32i16_1( %va) { -; CHECK-LABEL: vxor_vi_nxv32i16_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i16 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv32i16_2( %va) { -; CHECK-LABEL: vxor_vi_nxv32i16_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i16 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv1i32( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv1i32( %va, i32 %b) { -; CHECK-LABEL: vxor_vx_nxv1i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i32_0( %va) { -; CHECK-LABEL: vxor_vi_nxv1i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i32_1( %va) { -; CHECK-LABEL: vxor_vi_nxv1i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i32 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i32_2( %va) { -; CHECK-LABEL: vxor_vi_nxv1i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv2i32( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv2i32( %va, i32 %b) { -; CHECK-LABEL: vxor_vx_nxv2i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i32_0( %va) { -; CHECK-LABEL: vxor_vi_nxv2i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i32_1( %va) { -; CHECK-LABEL: vxor_vi_nxv2i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i32 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i32_2( %va) { -; CHECK-LABEL: vxor_vi_nxv2i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv4i32( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv4i32( %va, i32 %b) { -; CHECK-LABEL: vxor_vx_nxv4i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i32_0( %va) { -; CHECK-LABEL: vxor_vi_nxv4i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i32_1( %va) { -; CHECK-LABEL: vxor_vi_nxv4i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i32 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i32_2( %va) { -; CHECK-LABEL: vxor_vi_nxv4i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv8i32( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv8i32( %va, i32 %b) { -; CHECK-LABEL: vxor_vx_nxv8i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i32_0( %va) { -; CHECK-LABEL: vxor_vi_nxv8i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i32_1( %va) { -; CHECK-LABEL: vxor_vi_nxv8i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i32 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i32_2( %va) { -; CHECK-LABEL: vxor_vi_nxv8i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv16i32( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv16i32( %va, i32 %b) { -; CHECK-LABEL: vxor_vx_nxv16i32: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv16i32_0( %va) { -; CHECK-LABEL: vxor_vi_nxv16i32_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i32 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv16i32_1( %va) { -; CHECK-LABEL: vxor_vi_nxv16i32_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i32 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv16i32_2( %va) { -; CHECK-LABEL: vxor_vi_nxv16i32_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i32 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv1i64( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v9 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vxor_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: vxor.vv v8, v8, v9 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i64_0( %va) { -; CHECK-LABEL: vxor_vi_nxv1i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i64_1( %va) { -; CHECK-LABEL: vxor_vi_nxv1i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv1i64_2( %va) { -; CHECK-LABEL: vxor_vi_nxv1i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv2i64( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v10 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vxor_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: vxor.vv v8, v8, v10 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i64_0( %va) { -; CHECK-LABEL: vxor_vi_nxv2i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i64_1( %va) { -; CHECK-LABEL: vxor_vi_nxv2i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv2i64_2( %va) { -; CHECK-LABEL: vxor_vi_nxv2i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv4i64( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v12 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vxor_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: vxor.vv v8, v8, v12 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i64_0( %va) { -; CHECK-LABEL: vxor_vi_nxv4i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i64_1( %va) { -; CHECK-LABEL: vxor_vi_nxv4i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv4i64_2( %va) { -; CHECK-LABEL: vxor_vi_nxv4i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vv_nxv8i64( %va, %vb) { -; CHECK-LABEL: vxor_vv_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vxor.vv v8, v8, v16 -; CHECK-NEXT: ret - %vc = xor %va, %vb - ret %vc -} - -define @vxor_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vxor_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: addi sp, sp, -16 -; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: sw a1, 12(sp) -; CHECK-NEXT: sw a0, 8(sp) -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: addi a0, sp, 8 -; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: vxor.vv v8, v8, v16 -; CHECK-NEXT: addi sp, sp, 16 -; CHECK-NEXT: ret - %head = insertelement undef, i64 %b, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i64_0( %va) { -; CHECK-LABEL: vxor_vi_nxv8i64_0: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, -1 -; CHECK-NEXT: ret - %head = insertelement undef, i64 -1, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i64_1( %va) { -; CHECK-LABEL: vxor_vi_nxv8i64_1: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; CHECK-NEXT: vxor.vi v8, v8, 8 -; CHECK-NEXT: ret - %head = insertelement undef, i64 8, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - -define @vxor_vi_nxv8i64_2( %va) { -; CHECK-LABEL: vxor_vi_nxv8i64_2: -; CHECK: # %bb.0: -; CHECK-NEXT: addi a0, zero, 16 -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret - %head = insertelement undef, i64 16, i32 0 - %splat = shufflevector %head, undef, zeroinitializer - %vc = xor %va, %splat - ret %vc -} - diff --git a/llvm/test/CodeGen/RISCV/rvv/vxor-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vxor-sdnode.ll rename from llvm/test/CodeGen/RISCV/rvv/vxor-sdnode-rv64.ll rename to llvm/test/CodeGen/RISCV/rvv/vxor-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vxor-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vxor-sdnode.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 define @vxor_vv_nxv1i8( %va, %vb) { ; CHECK-LABEL: vxor_vv_nxv1i8: @@ -1074,11 +1075,24 @@ } define @vxor_vx_nxv1i64( %va, i64 %b) { -; CHECK-LABEL: vxor_vx_nxv1i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vxor_vx_nxv1i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m1, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v9, (a0), zero +; RV32-NEXT: vxor.vv v8, v8, v9 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vxor_vx_nxv1i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, mu +; RV64-NEXT: vxor.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = xor %va, %splat @@ -1133,11 +1147,24 @@ } define @vxor_vx_nxv2i64( %va, i64 %b) { -; CHECK-LABEL: vxor_vx_nxv2i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vxor_vx_nxv2i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v10, (a0), zero +; RV32-NEXT: vxor.vv v8, v8, v10 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vxor_vx_nxv2i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, mu +; RV64-NEXT: vxor.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = xor %va, %splat @@ -1192,11 +1219,24 @@ } define @vxor_vx_nxv4i64( %va, i64 %b) { -; CHECK-LABEL: vxor_vx_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vxor_vx_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v12, (a0), zero +; RV32-NEXT: vxor.vv v8, v8, v12 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vxor_vx_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, mu +; RV64-NEXT: vxor.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = xor %va, %splat @@ -1251,11 +1291,24 @@ } define @vxor_vx_nxv8i64( %va, i64 %b) { -; CHECK-LABEL: vxor_vx_nxv8i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; CHECK-NEXT: vxor.vx v8, v8, a0 -; CHECK-NEXT: ret +; RV32-LABEL: vxor_vx_nxv8i64: +; RV32: # %bb.0: +; RV32-NEXT: addi sp, sp, -16 +; RV32-NEXT: .cfi_def_cfa_offset 16 +; RV32-NEXT: sw a1, 12(sp) +; RV32-NEXT: sw a0, 8(sp) +; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu +; RV32-NEXT: addi a0, sp, 8 +; RV32-NEXT: vlse64.v v16, (a0), zero +; RV32-NEXT: vxor.vv v8, v8, v16 +; RV32-NEXT: addi sp, sp, 16 +; RV32-NEXT: ret +; +; RV64-LABEL: vxor_vx_nxv8i64: +; RV64: # %bb.0: +; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV64-NEXT: vxor.vx v8, v8, a0 +; RV64-NEXT: ret %head = insertelement undef, i64 %b, i32 0 %splat = shufflevector %head, undef, zeroinitializer %vc = xor %va, %splat