From fb0dbc54813473f438bc07f38ef61557de2da216 Mon Sep 17 00:00:00 2001 From: Stephan Herhut Date: Fri, 25 Jun 2021 12:44:22 +0200 Subject: [PATCH] [mlir][memref] Introduce UnrankedMemRefOf to tablegen definitions This enables specifying operations that only support some element types for unranked memrefs. Differential Revision: https://reviews.llvm.org/D104906 --- mlir/include/mlir/IR/OpBase.td | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/mlir/include/mlir/IR/OpBase.td b/mlir/include/mlir/IR/OpBase.td index 952e3a3..2b17731 100644 --- a/mlir/include/mlir/IR/OpBase.td +++ b/mlir/include/mlir/IR/OpBase.td @@ -211,10 +211,14 @@ def IsTensorTypePred : CPred<"$_self.isa<::mlir::TensorType>()">; // Whether a type is a MemRefType. def IsMemRefTypePred : CPred<"$_self.isa<::mlir::MemRefType>()">; -// Whether a type is an IsUnrankedMemRefType +// Whether a type is an UnrankedMemRefType def IsUnrankedMemRefTypePred : CPred<"$_self.isa<::mlir::UnrankedMemRefType>()">; +// Whether a type is a BaseMemRefType +def IsBaseMemRefTypePred + : CPred<"$_self.isa<::mlir::BaseMemRefType>()">; + // Whether a type is a ShapedType. def IsShapedTypePred : CPred<"$_self.isa<::mlir::ShapedType>()">; @@ -651,10 +655,13 @@ class 3DTensorOf allowedTypes> : TensorRankOf; class 4DTensorOf allowedTypes> : TensorRankOf; // Unranked Memref type -def AnyUnrankedMemRef : - ShapedContainerType<[AnyType], +class UnrankedMemRefOf allowedTypes> : + ShapedContainerType; + +def AnyUnrankedMemRef : UnrankedMemRefOf<[AnyType]>; + // Memref type. // Memrefs are blocks of data with fixed type and rank. @@ -664,6 +671,9 @@ class MemRefOf allowedTypes> : def AnyMemRef : MemRefOf<[AnyType]>; +class RankedOrUnrankedMemRefOf allowedTypes>: + AnyTypeOf<[UnrankedMemRefOf, MemRefOf]>; + def AnyRankedOrUnrankedMemRef: AnyTypeOf<[AnyUnrankedMemRef, AnyMemRef]>; // Memref declarations handle any memref, independent of rank, size, (static or -- 2.7.4