[PATCH] D80601: [mlir][core] Add IndexElementsAttr helpers.
Sean Silva via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue May 26 17:28:11 PDT 2020
silvas created this revision.
Herald added subscribers: llvm-commits, jurahul, Kayjukh, frgossen, grosul1, Joonsoo, stephenneuendorffer, liufengdb, lucyrfox, mgester, arpith-jacob, nicolasvasilache, antiagainst, shauheen, jpienaar, rriddle, mehdi_amini, arphaman.
Herald added a reviewer: rriddle.
Herald added a reviewer: antiagainst.
Herald added a project: LLVM.
silvas added reviewers: mehdi_amini, ftynse.
In a follow-up, I'll update the Shape dialect to use this instead of
I64ElementsAttr.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D80601
Files:
mlir/include/mlir/IR/Builders.h
mlir/include/mlir/IR/OpBase.td
mlir/lib/IR/Attributes.cpp
mlir/lib/IR/Builders.cpp
mlir/test/lib/Dialect/Test/TestOps.td
mlir/test/mlir-tblgen/types.mlir
Index: mlir/test/mlir-tblgen/types.mlir
===================================================================
--- mlir/test/mlir-tblgen/types.mlir
+++ mlir/test/mlir-tblgen/types.mlir
@@ -489,3 +489,18 @@
"test.i32ElementsAttr"() {attr = dense<[1, 2]>:tensor<2xi32>} : () -> ()
return
}
+
+// -----
+
+func @elements_attr_index() {
+ "test.indexElementsAttr"() {attr = dense<[1, 2]>:tensor<2xindex>} : () -> ()
+ return
+}
+
+// -----
+
+func @elements_attr_not_index() {
+ // expected-error at +1 {{index elements attribute}}
+ "test.indexElementsAttr"() {attr = dense<[1, 2]>:tensor<2xi32>} : () -> ()
+ return
+}
Index: mlir/test/lib/Dialect/Test/TestOps.td
===================================================================
--- mlir/test/lib/Dialect/Test/TestOps.td
+++ mlir/test/lib/Dialect/Test/TestOps.td
@@ -454,6 +454,10 @@
let arguments = (ins I32ElementsAttr:$attr);
}
+def IndexElementsAttrOp : TEST_Op<"indexElementsAttr"> {
+ let arguments = (ins IndexElementsAttr:$attr);
+}
+
def OpWithInferTypeInterfaceOp : TEST_Op<"op_with_infer_type_if", [
DeclareOpInterfaceMethods<InferTypeOpInterface>]> {
let arguments = (ins AnyTensor, AnyTensor);
Index: mlir/lib/IR/Builders.cpp
===================================================================
--- mlir/lib/IR/Builders.cpp
+++ mlir/lib/IR/Builders.cpp
@@ -130,6 +130,13 @@
values);
}
+DenseIntElementsAttr Builder::getIndexTensorAttr(ArrayRef<int64_t> values) {
+ return DenseIntElementsAttr::get(
+ RankedTensorType::get(static_cast<int64_t>(values.size()),
+ getIndexType()),
+ values);
+}
+
IntegerAttr Builder::getI32IntegerAttr(int32_t value) {
return IntegerAttr::get(getIntegerType(32), APInt(32, value));
}
Index: mlir/lib/IR/Attributes.cpp
===================================================================
--- mlir/lib/IR/Attributes.cpp
+++ mlir/lib/IR/Attributes.cpp
@@ -624,6 +624,8 @@
owner.getContext());
return IntegerAttr::get(eltTy, *IntElementIterator(owner, index));
}
+ if (eltTy.isa<IndexType>())
+ return IntegerAttr::get(eltTy, *IntElementIterator(owner, index));
if (auto floatEltTy = eltTy.dyn_cast<FloatType>()) {
IntElementIterator intIt(owner, index);
FloatElementIterator floatIt(floatEltTy.getFloatSemantics(), intIt);
Index: mlir/include/mlir/IR/OpBase.td
===================================================================
--- mlir/include/mlir/IR/OpBase.td
+++ mlir/include/mlir/IR/OpBase.td
@@ -1218,6 +1218,13 @@
let convertFromStorage = "$_self";
}
+def IndexElementsAttr
+ : IntElementsAttrBase<CPred<[{$_self.cast<DenseIntElementsAttr>()
+ .getType()
+ .getElementType()
+ .isIndex()}]>,
+ "index elements attribute">;
+
class AnyIntElementsAttr<int width> : IntElementsAttrBase<
CPred<"$_self.cast<DenseIntElementsAttr>().getType()."
"getElementType().isInteger(" # width # ")">,
Index: mlir/include/mlir/IR/Builders.h
===================================================================
--- mlir/include/mlir/IR/Builders.h
+++ mlir/include/mlir/IR/Builders.h
@@ -128,6 +128,7 @@
/// as attributes.
DenseIntElementsAttr getI32TensorAttr(ArrayRef<int32_t> values);
DenseIntElementsAttr getI64TensorAttr(ArrayRef<int64_t> values);
+ DenseIntElementsAttr getIndexTensorAttr(ArrayRef<int64_t> values);
ArrayAttr getAffineMapArrayAttr(ArrayRef<AffineMap> values);
ArrayAttr getBoolArrayAttr(ArrayRef<bool> values);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D80601.266382.patch
Type: text/x-patch
Size: 3617 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200527/57630095/attachment.bin>
More information about the llvm-commits
mailing list