[RISCV] Infer mask type for vector intrinsics from the data type

We can use LLVMScalarOrSameVectorWidth<0, llvm_i1_ty> to infer the mask type from the anyvector_ty. This will save us from needing to pass it to getDeclaration when creating these intrinsics from clang.

No tests updates are needed because our declarations are exploiting a behavior in the IR parser where the declaration of an intrinsic doesn't need to mention all the types as long as there isn't a name conflict in the file.

Reviewed By: khchen

Differential Revision: https://reviews.llvm.org/D93409
This commit is contained in:
Craig Topper 2020-12-16 20:04:48 -08:00
parent 1e42ad9d62
commit 0d7dd026c8
1 changed files with 8 additions and 6 deletions

View File

@ -124,7 +124,7 @@ let TargetPrefix = "riscv" in {
class RISCVBinaryAAXMask class RISCVBinaryAAXMask
: Intrinsic<[llvm_anyvector_ty], : Intrinsic<[llvm_anyvector_ty],
[LLVMMatchType<0>, LLVMMatchType<0>, llvm_any_ty, [LLVMMatchType<0>, LLVMMatchType<0>, llvm_any_ty,
llvm_anyvector_ty, llvm_anyint_ty], LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>, llvm_anyint_ty],
[IntrNoMem]>, RISCVVIntrinsic { [IntrNoMem]>, RISCVVIntrinsic {
let ExtendOperand = 3; let ExtendOperand = 3;
} }
@ -141,7 +141,7 @@ let TargetPrefix = "riscv" in {
class RISCVBinaryABXMask class RISCVBinaryABXMask
: Intrinsic<[llvm_anyvector_ty], : Intrinsic<[llvm_anyvector_ty],
[LLVMMatchType<0>, llvm_anyvector_ty, llvm_any_ty, [LLVMMatchType<0>, llvm_anyvector_ty, llvm_any_ty,
llvm_anyvector_ty, llvm_anyint_ty], LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>, llvm_anyint_ty],
[IntrNoMem]>, RISCVVIntrinsic { [IntrNoMem]>, RISCVVIntrinsic {
let ExtendOperand = 3; let ExtendOperand = 3;
} }
@ -149,7 +149,8 @@ let TargetPrefix = "riscv" in {
// Input: (vector_in, vector_in/scalar_in, V0, vl) // Input: (vector_in, vector_in/scalar_in, V0, vl)
class RISCVBinaryWithV0 class RISCVBinaryWithV0
: Intrinsic<[llvm_anyvector_ty], : Intrinsic<[llvm_anyvector_ty],
[LLVMMatchType<0>, llvm_any_ty, llvm_anyvector_ty, [LLVMMatchType<0>, llvm_any_ty,
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
llvm_anyint_ty], llvm_anyint_ty],
[IntrNoMem]>, RISCVVIntrinsic { [IntrNoMem]>, RISCVVIntrinsic {
let ExtendOperand = 2; let ExtendOperand = 2;
@ -158,8 +159,9 @@ let TargetPrefix = "riscv" in {
// Output: (mask type output) // Output: (mask type output)
// Input: (vector_in, vector_in/scalar_in, V0, vl) // Input: (vector_in, vector_in/scalar_in, V0, vl)
class RISCVBinaryMOutWithV0 class RISCVBinaryMOutWithV0
:Intrinsic<[llvm_anyvector_ty], :Intrinsic<[LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>],
[llvm_anyvector_ty, llvm_any_ty, LLVMMatchType<0>, [llvm_anyvector_ty, llvm_any_ty,
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
llvm_anyint_ty], llvm_anyint_ty],
[IntrNoMem]>, RISCVVIntrinsic { [IntrNoMem]>, RISCVVIntrinsic {
let ExtendOperand = 2; let ExtendOperand = 2;
@ -168,7 +170,7 @@ let TargetPrefix = "riscv" in {
// Output: (mask type output) // Output: (mask type output)
// Input: (vector_in, vector_in/scalar_in, vl) // Input: (vector_in, vector_in/scalar_in, vl)
class RISCVBinaryMOut class RISCVBinaryMOut
: Intrinsic<[llvm_anyvector_ty], : Intrinsic<[LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>],
[llvm_anyvector_ty, llvm_any_ty, llvm_anyint_ty], [llvm_anyvector_ty, llvm_any_ty, llvm_anyint_ty],
[IntrNoMem]>, RISCVVIntrinsic { [IntrNoMem]>, RISCVVIntrinsic {
let ExtendOperand = 2; let ExtendOperand = 2;