diff --git a/llvm/include/llvm/IR/IntrinsicsRISCV.td b/llvm/include/llvm/IR/IntrinsicsRISCV.td index cb335e739266ba..6778b20ac0a89b 100644 --- a/llvm/include/llvm/IR/IntrinsicsRISCV.td +++ b/llvm/include/llvm/IR/IntrinsicsRISCV.td @@ -189,6 +189,12 @@ let TargetPrefix = "riscv" in { LLVMPointerType>, llvm_anyvector_ty, LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>, llvm_anyint_ty], [NoCapture>, IntrWriteMem]>, RISCVVIntrinsic; + // For destination vector type is the same as first and second source vector. + // Input: (vector_in, vector_in, vl) + class RISCVBinaryAAANoMask + : Intrinsic<[llvm_anyvector_ty], + [LLVMMatchType<0>, LLVMMatchType<0>, llvm_anyint_ty], + [IntrNoMem]>, RISCVVIntrinsic; // For destination vector type is the same as first source vector. // Input: (vector_in, vector_in/scalar_in, vl) class RISCVBinaryAAXNoMask @@ -643,4 +649,13 @@ let TargetPrefix = "riscv" in { defm vfredsum : RISCVReduction; defm vfredmin : RISCVReduction; defm vfredmax : RISCVReduction; + + def int_riscv_vmand: RISCVBinaryAAANoMask; + def int_riscv_vmnand: RISCVBinaryAAANoMask; + def int_riscv_vmandnot: RISCVBinaryAAANoMask; + def int_riscv_vmxor: RISCVBinaryAAANoMask; + def int_riscv_vmor: RISCVBinaryAAANoMask; + def int_riscv_vmnor: RISCVBinaryAAANoMask; + def int_riscv_vmornot: RISCVBinaryAAANoMask; + def int_riscv_vmxnor: RISCVBinaryAAANoMask; } // TargetPrefix = "riscv" diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td index 713a289badc245..c23c650973b3cb 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -188,6 +188,25 @@ class GetIntVTypeInfo VTypeInfo Vti = !cast(!subst("VF", "VI", !cast(vti))); } +class MTypeInfo { + ValueType Mask = Mas; + // {SEW, VLMul} values set a valid VType to deal with this mask type. + // we assume SEW=8 and set corresponding LMUL. + int SEW = 8; + LMULInfo LMul = M; +} + +defset list AllMasks = { + // vbool_t, = SEW/LMUL, we assume SEW=8 and corresponding LMUL. + def : MTypeInfo; + def : MTypeInfo; + def : MTypeInfo; + def : MTypeInfo; + def : MTypeInfo; + def : MTypeInfo; + def : MTypeInfo; +} + class VTypeInfoToWide { VTypeInfo Vti = vti; @@ -697,6 +716,13 @@ multiclass VPseudoBinaryV_VI { defm _VI : VPseudoBinary; } +multiclass VPseudoBinaryM_MM { + foreach m = MxList.m in + let VLMul = m.value in { + def "_MM_" # m.MX : VPseudoBinaryNoMask; + } +} + // We use earlyclobber here due to // * The destination EEW is smaller than the source EEW and the overlap is // in the lowest-numbered part of the source register group is legal. @@ -1297,6 +1323,13 @@ multiclass VPatBinaryV_VI; } +multiclass VPatBinaryM_MM { + foreach mti = AllMasks in + def : VPatBinaryNoMask; +} + multiclass VPatBinaryW_VV vtilist> { foreach VtiToWti = vtilist in { @@ -2053,6 +2086,27 @@ defm PseudoVFREDMIN : VPseudoReductionV_VS; defm PseudoVFREDMAX : VPseudoReductionV_VS; } // Predicates = [HasStdExtV, HasStdExtF] +//===----------------------------------------------------------------------===// +// 16. Vector Mask Instructions +//===----------------------------------------------------------------------===// + +//===----------------------------------------------------------------------===// +// 16.1 Vector Mask-Register Logical Instructions +//===----------------------------------------------------------------------===// + +defm PseudoVMAND: VPseudoBinaryM_MM; +defm PseudoVMNAND: VPseudoBinaryM_MM; +defm PseudoVMANDNOT: VPseudoBinaryM_MM; +defm PseudoVMXOR: VPseudoBinaryM_MM; +defm PseudoVMOR: VPseudoBinaryM_MM; +defm PseudoVMNOR: VPseudoBinaryM_MM; +defm PseudoVMORNOT: VPseudoBinaryM_MM; +defm PseudoVMXNOR: VPseudoBinaryM_MM; + +//===----------------------------------------------------------------------===// +// 17. Vector Permutation Instructions +//===----------------------------------------------------------------------===// + //===----------------------------------------------------------------------===// // 17.1. Integer Scalar Move Instructions //===----------------------------------------------------------------------===// @@ -2512,6 +2566,24 @@ defm "" : VPatReductionV_VS<"int_riscv_vfredmin", "PseudoVFREDMIN", /*IsFloat=*/ defm "" : VPatReductionV_VS<"int_riscv_vfredmax", "PseudoVFREDMAX", /*IsFloat=*/1>; } // Predicates = [HasStdExtV, HasStdExtF] +//===----------------------------------------------------------------------===// +// 16. Vector Mask Instructions +//===----------------------------------------------------------------------===// + +//===----------------------------------------------------------------------===// +// 16.1 Vector Mask-Register Logical Instructions +//===----------------------------------------------------------------------===// +let Predicates = [HasStdExtV] in { + defm "" : VPatBinaryM_MM<"int_riscv_vmand", "PseudoVMAND">; + defm "" : VPatBinaryM_MM<"int_riscv_vmnand", "PseudoVMNAND">; + defm "" : VPatBinaryM_MM<"int_riscv_vmandnot", "PseudoVMANDNOT">; + defm "" : VPatBinaryM_MM<"int_riscv_vmxor", "PseudoVMXOR">; + defm "" : VPatBinaryM_MM<"int_riscv_vmor", "PseudoVMOR">; + defm "" : VPatBinaryM_MM<"int_riscv_vmnor", "PseudoVMNOR">; + defm "" : VPatBinaryM_MM<"int_riscv_vmornot", "PseudoVMORNOT">; + defm "" : VPatBinaryM_MM<"int_riscv_vmxnor", "PseudoVMXNOR">; +} // Predicates = [HasStdExtV] + //===----------------------------------------------------------------------===// // 17. Vector Permutation Instructions //===----------------------------------------------------------------------===// diff --git a/llvm/test/CodeGen/RISCV/rvv/vmand-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmand-rv32.ll new file mode 100644 index 00000000000000..58155699a9541c --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmand-rv32.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmand.nxv1i1( + , + , + i32); + +define @intrinsic_vmand_mm_nxv1i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv1i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv2i1( + , + , + i32); + +define @intrinsic_vmand_mm_nxv2i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv2i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv4i1( + , + , + i32); + +define @intrinsic_vmand_mm_nxv4i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv4i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv8i1( + , + , + i32); + +define @intrinsic_vmand_mm_nxv8i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv8i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv16i1( + , + , + i32); + +define @intrinsic_vmand_mm_nxv16i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv16i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv32i1( + , + , + i32); + +define @intrinsic_vmand_mm_nxv32i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv32i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv64i1( + , + , + i32); + +define @intrinsic_vmand_mm_nxv64i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv64i1( + %0, + %1, + i32 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmand-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmand-rv64.ll new file mode 100644 index 00000000000000..28710a511ecb2a --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmand-rv64.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmand.nxv1i1( + , + , + i64); + +define @intrinsic_vmand_mm_nxv1i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv1i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv2i1( + , + , + i64); + +define @intrinsic_vmand_mm_nxv2i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv2i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv4i1( + , + , + i64); + +define @intrinsic_vmand_mm_nxv4i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv4i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv8i1( + , + , + i64); + +define @intrinsic_vmand_mm_nxv8i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv8i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv16i1( + , + , + i64); + +define @intrinsic_vmand_mm_nxv16i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv16i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv32i1( + , + , + i64); + +define @intrinsic_vmand_mm_nxv32i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv32i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmand.nxv64i1( + , + , + i64); + +define @intrinsic_vmand_mm_nxv64i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmand_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmand.nxv64i1( + %0, + %1, + i64 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmandnot-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmandnot-rv32.ll new file mode 100644 index 00000000000000..efc39d222235d1 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmandnot-rv32.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmandnot.nxv1i1( + , + , + i32); + +define @intrinsic_vmandnot_mm_nxv1i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv1i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv2i1( + , + , + i32); + +define @intrinsic_vmandnot_mm_nxv2i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv2i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv4i1( + , + , + i32); + +define @intrinsic_vmandnot_mm_nxv4i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv4i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv8i1( + , + , + i32); + +define @intrinsic_vmandnot_mm_nxv8i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv8i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv16i1( + , + , + i32); + +define @intrinsic_vmandnot_mm_nxv16i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv16i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv32i1( + , + , + i32); + +define @intrinsic_vmandnot_mm_nxv32i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv32i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv64i1( + , + , + i32); + +define @intrinsic_vmandnot_mm_nxv64i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv64i1( + %0, + %1, + i32 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmandnot-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmandnot-rv64.ll new file mode 100644 index 00000000000000..51061af58af69d --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmandnot-rv64.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmandnot.nxv1i1( + , + , + i64); + +define @intrinsic_vmandnot_mm_nxv1i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv1i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv2i1( + , + , + i64); + +define @intrinsic_vmandnot_mm_nxv2i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv2i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv4i1( + , + , + i64); + +define @intrinsic_vmandnot_mm_nxv4i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv4i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv8i1( + , + , + i64); + +define @intrinsic_vmandnot_mm_nxv8i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv8i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv16i1( + , + , + i64); + +define @intrinsic_vmandnot_mm_nxv16i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv16i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv32i1( + , + , + i64); + +define @intrinsic_vmandnot_mm_nxv32i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv32i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmandnot.nxv64i1( + , + , + i64); + +define @intrinsic_vmandnot_mm_nxv64i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmandnot_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmandnot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmandnot.nxv64i1( + %0, + %1, + i64 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmnand-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmnand-rv32.ll new file mode 100644 index 00000000000000..5e5d1f613ce7a4 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmnand-rv32.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmnand.nxv1i1( + , + , + i32); + +define @intrinsic_vmnand_mm_nxv1i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv1i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv2i1( + , + , + i32); + +define @intrinsic_vmnand_mm_nxv2i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv2i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv4i1( + , + , + i32); + +define @intrinsic_vmnand_mm_nxv4i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv4i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv8i1( + , + , + i32); + +define @intrinsic_vmnand_mm_nxv8i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv8i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv16i1( + , + , + i32); + +define @intrinsic_vmnand_mm_nxv16i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv16i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv32i1( + , + , + i32); + +define @intrinsic_vmnand_mm_nxv32i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv32i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv64i1( + , + , + i32); + +define @intrinsic_vmnand_mm_nxv64i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv64i1( + %0, + %1, + i32 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmnand-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmnand-rv64.ll new file mode 100644 index 00000000000000..aa4c2b3e927a28 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmnand-rv64.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmnand.nxv1i1( + , + , + i64); + +define @intrinsic_vmnand_mm_nxv1i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv1i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv2i1( + , + , + i64); + +define @intrinsic_vmnand_mm_nxv2i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv2i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv4i1( + , + , + i64); + +define @intrinsic_vmnand_mm_nxv4i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv4i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv8i1( + , + , + i64); + +define @intrinsic_vmnand_mm_nxv8i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv8i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv16i1( + , + , + i64); + +define @intrinsic_vmnand_mm_nxv16i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv16i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv32i1( + , + , + i64); + +define @intrinsic_vmnand_mm_nxv32i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv32i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnand.nxv64i1( + , + , + i64); + +define @intrinsic_vmnand_mm_nxv64i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnand_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmnand.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnand.nxv64i1( + %0, + %1, + i64 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmnor-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmnor-rv32.ll new file mode 100644 index 00000000000000..ae9ff38377ac09 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmnor-rv32.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmnor.nxv1i1( + , + , + i32); + +define @intrinsic_vmnor_mm_nxv1i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv1i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv2i1( + , + , + i32); + +define @intrinsic_vmnor_mm_nxv2i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv2i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv4i1( + , + , + i32); + +define @intrinsic_vmnor_mm_nxv4i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv4i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv8i1( + , + , + i32); + +define @intrinsic_vmnor_mm_nxv8i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv8i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv16i1( + , + , + i32); + +define @intrinsic_vmnor_mm_nxv16i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv16i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv32i1( + , + , + i32); + +define @intrinsic_vmnor_mm_nxv32i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv32i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv64i1( + , + , + i32); + +define @intrinsic_vmnor_mm_nxv64i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv64i1( + %0, + %1, + i32 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmnor-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmnor-rv64.ll new file mode 100644 index 00000000000000..454599c19913ab --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmnor-rv64.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmnor.nxv1i1( + , + , + i64); + +define @intrinsic_vmnor_mm_nxv1i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv1i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv2i1( + , + , + i64); + +define @intrinsic_vmnor_mm_nxv2i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv2i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv4i1( + , + , + i64); + +define @intrinsic_vmnor_mm_nxv4i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv4i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv8i1( + , + , + i64); + +define @intrinsic_vmnor_mm_nxv8i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv8i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv16i1( + , + , + i64); + +define @intrinsic_vmnor_mm_nxv16i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv16i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv32i1( + , + , + i64); + +define @intrinsic_vmnor_mm_nxv32i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv32i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmnor.nxv64i1( + , + , + i64); + +define @intrinsic_vmnor_mm_nxv64i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmnor_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmnor.nxv64i1( + %0, + %1, + i64 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmor-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmor-rv32.ll new file mode 100644 index 00000000000000..09db9ddb2b69e9 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmor-rv32.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmor.nxv1i1( + , + , + i32); + +define @intrinsic_vmor_mm_nxv1i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv1i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv2i1( + , + , + i32); + +define @intrinsic_vmor_mm_nxv2i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv2i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv4i1( + , + , + i32); + +define @intrinsic_vmor_mm_nxv4i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv4i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv8i1( + , + , + i32); + +define @intrinsic_vmor_mm_nxv8i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv8i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv16i1( + , + , + i32); + +define @intrinsic_vmor_mm_nxv16i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv16i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv32i1( + , + , + i32); + +define @intrinsic_vmor_mm_nxv32i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv32i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv64i1( + , + , + i32); + +define @intrinsic_vmor_mm_nxv64i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv64i1( + %0, + %1, + i32 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmor-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmor-rv64.ll new file mode 100644 index 00000000000000..ee9cd0ba85ceb2 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmor-rv64.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmor.nxv1i1( + , + , + i64); + +define @intrinsic_vmor_mm_nxv1i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv1i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv2i1( + , + , + i64); + +define @intrinsic_vmor_mm_nxv2i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv2i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv4i1( + , + , + i64); + +define @intrinsic_vmor_mm_nxv4i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv4i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv8i1( + , + , + i64); + +define @intrinsic_vmor_mm_nxv8i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv8i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv16i1( + , + , + i64); + +define @intrinsic_vmor_mm_nxv16i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv16i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv32i1( + , + , + i64); + +define @intrinsic_vmor_mm_nxv32i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv32i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmor.nxv64i1( + , + , + i64); + +define @intrinsic_vmor_mm_nxv64i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmor_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmor.nxv64i1( + %0, + %1, + i64 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmornot-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmornot-rv32.ll new file mode 100644 index 00000000000000..175bf26051af50 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmornot-rv32.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmornot.nxv1i1( + , + , + i32); + +define @intrinsic_vmornot_mm_nxv1i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv1i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv2i1( + , + , + i32); + +define @intrinsic_vmornot_mm_nxv2i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv2i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv4i1( + , + , + i32); + +define @intrinsic_vmornot_mm_nxv4i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv4i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv8i1( + , + , + i32); + +define @intrinsic_vmornot_mm_nxv8i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv8i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv16i1( + , + , + i32); + +define @intrinsic_vmornot_mm_nxv16i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv16i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv32i1( + , + , + i32); + +define @intrinsic_vmornot_mm_nxv32i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv32i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv64i1( + , + , + i32); + +define @intrinsic_vmornot_mm_nxv64i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv64i1( + %0, + %1, + i32 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmornot-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmornot-rv64.ll new file mode 100644 index 00000000000000..96cf32b3640d29 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmornot-rv64.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmornot.nxv1i1( + , + , + i64); + +define @intrinsic_vmornot_mm_nxv1i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv1i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv2i1( + , + , + i64); + +define @intrinsic_vmornot_mm_nxv2i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv2i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv4i1( + , + , + i64); + +define @intrinsic_vmornot_mm_nxv4i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv4i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv8i1( + , + , + i64); + +define @intrinsic_vmornot_mm_nxv8i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv8i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv16i1( + , + , + i64); + +define @intrinsic_vmornot_mm_nxv16i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv16i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv32i1( + , + , + i64); + +define @intrinsic_vmornot_mm_nxv32i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv32i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmornot.nxv64i1( + , + , + i64); + +define @intrinsic_vmornot_mm_nxv64i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmornot_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmornot.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmornot.nxv64i1( + %0, + %1, + i64 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmxnor-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmxnor-rv32.ll new file mode 100644 index 00000000000000..878def5f436284 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmxnor-rv32.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmxnor.nxv1i1( + , + , + i32); + +define @intrinsic_vmxnor_mm_nxv1i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv1i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv2i1( + , + , + i32); + +define @intrinsic_vmxnor_mm_nxv2i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv2i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv4i1( + , + , + i32); + +define @intrinsic_vmxnor_mm_nxv4i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv4i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv8i1( + , + , + i32); + +define @intrinsic_vmxnor_mm_nxv8i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv8i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv16i1( + , + , + i32); + +define @intrinsic_vmxnor_mm_nxv16i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv16i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv32i1( + , + , + i32); + +define @intrinsic_vmxnor_mm_nxv32i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv32i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv64i1( + , + , + i32); + +define @intrinsic_vmxnor_mm_nxv64i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv64i1( + %0, + %1, + i32 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmxnor-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmxnor-rv64.ll new file mode 100644 index 00000000000000..073509fc5c940f --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmxnor-rv64.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmxnor.nxv1i1( + , + , + i64); + +define @intrinsic_vmxnor_mm_nxv1i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv1i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv2i1( + , + , + i64); + +define @intrinsic_vmxnor_mm_nxv2i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv2i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv4i1( + , + , + i64); + +define @intrinsic_vmxnor_mm_nxv4i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv4i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv8i1( + , + , + i64); + +define @intrinsic_vmxnor_mm_nxv8i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv8i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv16i1( + , + , + i64); + +define @intrinsic_vmxnor_mm_nxv16i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv16i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv32i1( + , + , + i64); + +define @intrinsic_vmxnor_mm_nxv32i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv32i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxnor.nxv64i1( + , + , + i64); + +define @intrinsic_vmxnor_mm_nxv64i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxnor_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmxnor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxnor.nxv64i1( + %0, + %1, + i64 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmxor-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vmxor-rv32.ll new file mode 100644 index 00000000000000..743aff55e3ebbd --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmxor-rv32.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv32 -mattr=+experimental-v,+f -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmxor.nxv1i1( + , + , + i32); + +define @intrinsic_vmxor_mm_nxv1i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv1i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv2i1( + , + , + i32); + +define @intrinsic_vmxor_mm_nxv2i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv2i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv4i1( + , + , + i32); + +define @intrinsic_vmxor_mm_nxv4i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv4i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv8i1( + , + , + i32); + +define @intrinsic_vmxor_mm_nxv8i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv8i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv16i1( + , + , + i32); + +define @intrinsic_vmxor_mm_nxv16i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv16i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv32i1( + , + , + i32); + +define @intrinsic_vmxor_mm_nxv32i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv32i1( + %0, + %1, + i32 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv64i1( + , + , + i32); + +define @intrinsic_vmxor_mm_nxv64i1( %0, %1, i32 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv64i1( + %0, + %1, + i32 %2) + + ret %a +} diff --git a/llvm/test/CodeGen/RISCV/rvv/vmxor-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vmxor-rv64.ll new file mode 100644 index 00000000000000..fc9d15a88f476c --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/vmxor-rv64.ll @@ -0,0 +1,127 @@ +; RUN: llc -mtriple=riscv64 -mattr=+experimental-v,+d -verify-machineinstrs \ +; RUN: --riscv-no-aliases < %s | FileCheck %s +declare @llvm.riscv.vmxor.nxv1i1( + , + , + i64); + +define @intrinsic_vmxor_mm_nxv1i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv1i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf8,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv1i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv2i1( + , + , + i64); + +define @intrinsic_vmxor_mm_nxv2i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv2i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf4,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv2i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv4i1( + , + , + i64); + +define @intrinsic_vmxor_mm_nxv4i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv4i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,mf2,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv4i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv8i1( + , + , + i64); + +define @intrinsic_vmxor_mm_nxv8i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv8i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m1,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv8i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv16i1( + , + , + i64); + +define @intrinsic_vmxor_mm_nxv16i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv16i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m2,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv16i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv32i1( + , + , + i64); + +define @intrinsic_vmxor_mm_nxv32i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv32i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m4,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv32i1( + %0, + %1, + i64 %2) + + ret %a +} + +declare @llvm.riscv.vmxor.nxv64i1( + , + , + i64); + +define @intrinsic_vmxor_mm_nxv64i1( %0, %1, i64 %2) nounwind { +entry: +; CHECK-LABEL: intrinsic_vmxor_mm_nxv64i1 +; CHECK: vsetvli {{.*}}, {{a[0-9]+}}, e8,m8,ta,mu +; CHECK: vmxor.mm {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}} + %a = call @llvm.riscv.vmxor.nxv64i1( + %0, + %1, + i64 %2) + + ret %a +}