[Mlir-commits] [mlir] c918c68 - [MLIR] Factor out common parts of the TLike constraint
Krzysztof Drewniak
llvmlistbot at llvm.org
Fri Jan 28 14:55:46 PST 2022
Author: Krzysztof Drewniak
Date: 2022-01-28T22:55:41Z
New Revision: c918c68f5cb1410b63168299b71b4c71b83ce516
URL: https://github.com/llvm/llvm-project/commit/c918c68f5cb1410b63168299b71b4c71b83ce516
DIFF: https://github.com/llvm/llvm-project/commit/c918c68f5cb1410b63168299b71b4c71b83ce516.diff
LOG: [MLIR] Factor out common parts of the TLike constraint
Type constraints such as BoolLike and SignlessIntegerLike appear to
have been defined by copy-paste and all share an underlying TypesLike
structure that can be factored out.
This also allows for defining additional constraints of a similar
form, such as F32Like.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D118382
Added:
Modified:
mlir/include/mlir/IR/OpBase.td
Removed:
################################################################################
diff --git a/mlir/include/mlir/IR/OpBase.td b/mlir/include/mlir/IR/OpBase.td
index 6bdf1b5fbc7b8..179d618409292 100644
--- a/mlir/include/mlir/IR/OpBase.td
+++ b/mlir/include/mlir/IR/OpBase.td
@@ -903,41 +903,38 @@ class NestedTupleOf<list<Type> allowedTypes> :
//===----------------------------------------------------------------------===//
// Common type constraints
//===----------------------------------------------------------------------===//
+// Type constraint for types that are "like" some type or set of types T, that is
+// they're either a T, a vector of Ts, or a tensor of Ts
+class TypeOrContainer<Type allowedType, string name> : TypeConstraint<Or<[
+ allowedType.predicate, VectorOf<[allowedType]>.predicate,
+ TensorOf<[allowedType]>.predicate]>,
+ name>;
+
+// Temporary constraint to allow gradual transition to supporting 0-D vectors.
+// TODO: Remove this when all ops support 0-D vectors.
+class TypeOrContainerOfAnyRank<Type allowedType, string name> : TypeConstraint<Or<[
+ allowedType.predicate, VectorOfAnyRankOf<[allowedType]>.predicate,
+ TensorOf<[allowedType]>.predicate]>,
+ name>;
+
// Type constraint for bool-like types: bools, vectors of bools, tensors of
// bools.
-def BoolLike : TypeConstraint<Or<[I1.predicate, VectorOf<[I1]>.predicate,
- TensorOf<[I1]>.predicate]>,
- "bool-like">;
+def BoolLike : TypeOrContainer<I1, "bool-like">;
-// Temporary constraint to allow gradual transition to supporting 0-D vectors.
-// TODO: Remove this when all ops support 0-D vectors.
-def BoolLikeOfAnyRank : TypeConstraint<Or<[
- I1.predicate,
- VectorOfAnyRankOf<[I1]>.predicate,
- TensorOf<[I1]>.predicate]>,
- "bool-like">;
+def BoolLikeOfAnyRank : TypeOrContainerOfAnyRank<I1, "bool-like">;
// Type constraint for signless-integer-like types: signless integers, indices,
// vectors of signless integers or indices, tensors of signless integers.
-def SignlessIntegerLike : TypeConstraint<Or<[
- AnySignlessIntegerOrIndex.predicate,
- VectorOf<[AnySignlessIntegerOrIndex]>.predicate,
- TensorOf<[AnySignlessIntegerOrIndex]>.predicate]>,
+def SignlessIntegerLike : TypeOrContainer<AnySignlessIntegerOrIndex,
"signless-integer-like">;
-// Temporary constraint to allow gradual transition to supporting 0-D vectors.
-// TODO: Remove this when all ops support 0-D vectors.
-def SignlessIntegerLikeOfAnyRank : TypeConstraint<Or<[
- AnySignlessIntegerOrIndex.predicate,
- VectorOfAnyRankOf<[AnySignlessIntegerOrIndex]>.predicate,
- TensorOf<[AnySignlessIntegerOrIndex]>.predicate]>,
+def SignlessIntegerLikeOfAnyRank : TypeOrContainerOfAnyRank<
+ AnySignlessIntegerOrIndex,
"signless-integer-like">;
// Type constraint for float-like types: floats, vectors or tensors thereof.
-def FloatLike : TypeConstraint<Or<[AnyFloat.predicate,
- VectorOf<[AnyFloat]>.predicate, TensorOf<[AnyFloat]>.predicate]>,
- "floating-point-like">;
+def FloatLike : TypeOrContainer<AnyFloat, "floating-point-like">;
// Type constraint for signless-integer-like or float-like types.
def SignlessIntegerOrFloatLike : TypeConstraint<Or<[
More information about the Mlir-commits
mailing list