================
@@ -1940,6 +1940,59 @@ let TargetPrefix = "riscv" in {
defm vwabdau : RISCVTernaryWide;
} // TargetPrefix = "riscv"
+// Zvzip - Reordering Structured Data in Vector Registers
+//===----------------------------------------------------------------------===//
+let TargetPrefix = "riscv" in {
+ multiclass RISCVZip {
+ // Input: (passthru, vector_in, vector_in, vl)
+ def "int_riscv_" # NAME :
+ DefaultAttrsIntrinsic<[llvm_anyvector_ty],
+ [LLVMMatchType<0>, llvm_anyvector_ty,
+ LLVMMatchType<1>, llvm_anyint_ty],
+ [IntrNoMem]>, RISCVVIntrinsic {
+ let VLOperand = 3;
+ }
+
+ // Input: (maskedoff, vector_in, vector_in, mask, vl, policy)
+ def "int_riscv_" # NAME # "_mask" :
+ DefaultAttrsIntrinsic<[llvm_anyvector_ty],
+ [LLVMMatchType<0>, llvm_anyvector_ty,
+ LLVMMatchType<1>,
+ LLVMScalarOrSameVectorWidth<1, llvm_i1_ty>,
+ llvm_anyint_ty, LLVMMatchType<2>],
+ [ImmArg<ArgIndex<5>>, IntrNoMem]>, RISCVVIntrinsic
{
+ let VLOperand = 4;
+ }
+ }
+
+ multiclass RISCVUnzip {
+ // Input: (passthru, vector_in, vl)
+ def "int_riscv_" # NAME :
+ DefaultAttrsIntrinsic<[llvm_anyvector_ty],
+ [LLVMMatchType<0>, llvm_anyvector_ty,
----------------
wangpc-pp wrote:
How will `LLVMScalarOrSameVectorWidth` interact with
`LLVMOneNthElementsVectorType`? We need the mask type to be of the same length
of the `1/2` vector type, but it seems that `LLVMScalarOrSameVectorWidth` needs
an index of intrinsic parameters. I did meet some issues when using
`LLVMScalarOrSameVectorWidth` but I don't know if I made it right.
https://github.com/llvm/llvm-project/pull/186342
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits