https://github.com/amrami updated https://github.com/llvm/llvm-project/pull/68230
>From 0b4f0d2c6c0aac64343e78f95b1bf6b30f63b3ae Mon Sep 17 00:00:00 2001 From: Maya Amrami <mayaa...@gmail.com> Date: Thu, 21 Sep 2023 18:11:50 +0300 Subject: [PATCH] [mlir] Add DenseUI32ArrayAttr --- mlir/include/mlir/IR/Builders.h | 1 + mlir/include/mlir/IR/BuiltinAttributes.h | 2 ++ mlir/include/mlir/IR/CommonAttrConstraints.td | 1 + mlir/lib/IR/Builders.cpp | 4 ++++ mlir/lib/IR/BuiltinAttributes.cpp | 4 ++++ mlir/test/IR/attribute.mlir | 13 ++++++++++++- mlir/test/lib/Dialect/Test/TestOps.td | 9 +++++++-- 7 files changed, 31 insertions(+), 3 deletions(-) diff --git a/mlir/include/mlir/IR/Builders.h b/mlir/include/mlir/IR/Builders.h index 3eca8bd12f43364..71d761821baeb73 100644 --- a/mlir/include/mlir/IR/Builders.h +++ b/mlir/include/mlir/IR/Builders.h @@ -154,6 +154,7 @@ class Builder { DenseBoolArrayAttr getDenseBoolArrayAttr(ArrayRef<bool> values); DenseI8ArrayAttr getDenseI8ArrayAttr(ArrayRef<int8_t> values); DenseI16ArrayAttr getDenseI16ArrayAttr(ArrayRef<int16_t> values); + DenseUI32ArrayAttr getDenseUI32ArrayAttr(ArrayRef<uint32_t> values); DenseI32ArrayAttr getDenseI32ArrayAttr(ArrayRef<int32_t> values); DenseI64ArrayAttr getDenseI64ArrayAttr(ArrayRef<int64_t> values); DenseF32ArrayAttr getDenseF32ArrayAttr(ArrayRef<float> values); diff --git a/mlir/include/mlir/IR/BuiltinAttributes.h b/mlir/include/mlir/IR/BuiltinAttributes.h index c8161604aad3503..ee12e9c59986eb0 100644 --- a/mlir/include/mlir/IR/BuiltinAttributes.h +++ b/mlir/include/mlir/IR/BuiltinAttributes.h @@ -755,6 +755,7 @@ class DenseArrayAttrImpl : public DenseArrayAttr { extern template class DenseArrayAttrImpl<bool>; extern template class DenseArrayAttrImpl<int8_t>; extern template class DenseArrayAttrImpl<int16_t>; +extern template class DenseArrayAttrImpl<uint32_t>; extern template class DenseArrayAttrImpl<int32_t>; extern template class DenseArrayAttrImpl<int64_t>; extern template class DenseArrayAttrImpl<float>; @@ -765,6 +766,7 @@ extern template class DenseArrayAttrImpl<double>; using DenseBoolArrayAttr = detail::DenseArrayAttrImpl<bool>; using DenseI8ArrayAttr = detail::DenseArrayAttrImpl<int8_t>; using DenseI16ArrayAttr = detail::DenseArrayAttrImpl<int16_t>; +using DenseUI32ArrayAttr = detail::DenseArrayAttrImpl<uint32_t>; using DenseI32ArrayAttr = detail::DenseArrayAttrImpl<int32_t>; using DenseI64ArrayAttr = detail::DenseArrayAttrImpl<int64_t>; using DenseF32ArrayAttr = detail::DenseArrayAttrImpl<float>; diff --git a/mlir/include/mlir/IR/CommonAttrConstraints.td b/mlir/include/mlir/IR/CommonAttrConstraints.td index 0312ac7ec1d8df5..6bdf286d0928913 100644 --- a/mlir/include/mlir/IR/CommonAttrConstraints.td +++ b/mlir/include/mlir/IR/CommonAttrConstraints.td @@ -433,6 +433,7 @@ class DenseArrayAttrBase<string denseAttrName, string cppType, string summaryNam def DenseBoolArrayAttr : DenseArrayAttrBase<"DenseBoolArrayAttr", "bool", "i1">; def DenseI8ArrayAttr : DenseArrayAttrBase<"DenseI8ArrayAttr", "int8_t", "i8">; def DenseI16ArrayAttr : DenseArrayAttrBase<"DenseI16ArrayAttr", "int16_t", "i16">; +def DenseUI32ArrayAttr : DenseArrayAttrBase<"DenseUI32ArrayAttr", "uint32_t", "ui32">; def DenseI32ArrayAttr : DenseArrayAttrBase<"DenseI32ArrayAttr", "int32_t", "i32">; def DenseI64ArrayAttr : DenseArrayAttrBase<"DenseI64ArrayAttr", "int64_t", "i64">; def DenseF32ArrayAttr : DenseArrayAttrBase<"DenseF32ArrayAttr", "float", "f32">; diff --git a/mlir/lib/IR/Builders.cpp b/mlir/lib/IR/Builders.cpp index ab20f4863e11c23..ba08544eb4059a0 100644 --- a/mlir/lib/IR/Builders.cpp +++ b/mlir/lib/IR/Builders.cpp @@ -180,6 +180,10 @@ DenseI32ArrayAttr Builder::getDenseI32ArrayAttr(ArrayRef<int32_t> values) { return DenseI32ArrayAttr::get(context, values); } +DenseUI32ArrayAttr Builder::getDenseUI32ArrayAttr(ArrayRef<uint32_t> values) { + return DenseUI32ArrayAttr::get(context, values); +} + DenseI64ArrayAttr Builder::getDenseI64ArrayAttr(ArrayRef<int64_t> values) { return DenseI64ArrayAttr::get(context, values); } diff --git a/mlir/lib/IR/BuiltinAttributes.cpp b/mlir/lib/IR/BuiltinAttributes.cpp index 5f1129326f4f772..5222c5801d347c0 100644 --- a/mlir/lib/IR/BuiltinAttributes.cpp +++ b/mlir/lib/IR/BuiltinAttributes.cpp @@ -761,6 +761,9 @@ struct DenseArrayAttrUtil<int8_t> : public DenseArrayAttrIntUtil<8> { template <> struct DenseArrayAttrUtil<int16_t> : public DenseArrayAttrIntUtil<16> {}; template <> +struct DenseArrayAttrUtil<uint32_t> + : public DenseArrayAttrIntUtil<32, IntegerType::Unsigned> {}; +template <> struct DenseArrayAttrUtil<int32_t> : public DenseArrayAttrIntUtil<32> {}; template <> struct DenseArrayAttrUtil<int64_t> : public DenseArrayAttrIntUtil<64> {}; @@ -876,6 +879,7 @@ namespace detail { template class DenseArrayAttrImpl<bool>; template class DenseArrayAttrImpl<int8_t>; template class DenseArrayAttrImpl<int16_t>; +template class DenseArrayAttrImpl<uint32_t>; template class DenseArrayAttrImpl<int32_t>; template class DenseArrayAttrImpl<int64_t>; template class DenseArrayAttrImpl<float>; diff --git a/mlir/test/IR/attribute.mlir b/mlir/test/IR/attribute.mlir index 291d5832fce79aa..05ddb39b75eb658 100644 --- a/mlir/test/IR/attribute.mlir +++ b/mlir/test/IR/attribute.mlir @@ -592,6 +592,8 @@ func.func @dense_array_attr() attributes { emptyi64attr = array<i64>, // CHECK-SAME: emptyi8attr = array<i8>, emptyi8attr = array<i8>, +// CHECK-SAME: emptyui32attr = array<ui32>, + emptyui32attr = array<ui32>, // CHECK-SAME: f32attr = array<f32: 1.024000e+03, 4.530000e+02, -6.435000e+03>, f32attr = array<f32: 1024., 453., -6435.>, // CHECK-SAME: f64attr = array<f64: -1.420000e+02>, @@ -605,7 +607,9 @@ func.func @dense_array_attr() attributes { // CHECK-SAME: i64attr = array<i64: -142>, i64attr = array<i64: -142>, // CHECK-SAME: i8attr = array<i8: 1, -2, 3> - i8attr = array<i8: 1, -2, 3> + i8attr = array<i8: 1, -2, 3>, +// CHECK-SAME: ui32attr = array<ui32: 1024, 453, 6435> + ui32attr = array<ui32: 1024, 453, 6435> } { // CHECK: test.dense_array_attr test.dense_array_attr @@ -617,6 +621,8 @@ func.func @dense_array_attr() attributes { i16attr = [3, 5, -4, 10] // CHECK-SAME: i32attr = [1024, 453, -6435] i32attr = [1024, 453, -6435] +// CHECK-SAME: ui32attr = [1024, 453, 6435] + ui32attr = [1024, 453, 6435] // CHECK-SAME: i64attr = [-142] i64attr = [-142] // CHECK-SAME: f32attr = [1.024000e+03, 4.530000e+02, -6.435000e+03] @@ -655,6 +661,7 @@ func.func @testConfinedDenseArrayAttr() { "test.confined_dense_array_attr"() { i64attr = array<i64: 0, 2, 3>, i32attr = array<i32: 1>, + ui32attr = array<ui32: 10>, emptyattr = array<i16> } : () -> () func.return @@ -666,6 +673,7 @@ func.func @testConfinedDenseArrayAttrDuplicateValues() { // expected-error@+1{{'test.confined_dense_array_attr' op attribute 'i64attr' failed to satisfy constraint: i64 dense array attribute should be in increasing order}} "test.confined_dense_array_attr"() { emptyattr = array<i16>, + ui32attr = array<ui32: 3, 3>, i32attr = array<i32: 1, 1>, i64attr = array<i64: 0, 2, 2> } : () -> () @@ -678,6 +686,7 @@ func.func @testConfinedDenseArrayAttrDecreasingOrder() { // expected-error@+1{{'test.confined_dense_array_attr' op attribute 'i32attr' failed to satisfy constraint: i32 dense array attribute should be in non-decreasing order}} "test.confined_dense_array_attr"() { emptyattr = array<i16>, + ui32attr = array<ui32: 1, 2>, i32attr = array<i32: 1, 0>, i64attr = array<i64: 0, 2, 3> } : () -> () @@ -690,6 +699,7 @@ func.func @testConfinedStrictlyPositiveDenseArrayAttr() { "test.confined_strictly_positive_attr"() { i8attr = array<i8: 2, 3>, i16attr = array<i16: 20, 30>, + ui32attr = array<ui32: 1>, i32attr = array<i32: 1>, i64attr = array<i64: 1, 2, 3>, f32attr = array<f32: 1.1, 2.1>, @@ -706,6 +716,7 @@ func.func @testConfinedStrictlyPositiveDenseArrayAttr() { "test.confined_strictly_positive_attr"() { i8attr = array<i8: 2, 3>, i16attr = array<i16: 20, 30>, + ui32attr = array<ui32: 1>, i32attr = array<i32: 1>, i64attr = array<i64: 0, 2, 3>, f32attr = array<f32: 1.1, 2.1>, diff --git a/mlir/test/lib/Dialect/Test/TestOps.td b/mlir/test/lib/Dialect/Test/TestOps.td index edb63924b3553f2..cfc9fd1e262f5e6 100644 --- a/mlir/test/lib/Dialect/Test/TestOps.td +++ b/mlir/test/lib/Dialect/Test/TestOps.td @@ -300,6 +300,7 @@ def DenseArrayAttrOp : TEST_Op<"dense_array_attr"> { DenseI8ArrayAttr:$i8attr, DenseI16ArrayAttr:$i16attr, DenseI32ArrayAttr:$i32attr, + DenseUI32ArrayAttr:$ui32attr, DenseI64ArrayAttr:$i64attr, DenseF32ArrayAttr:$f32attr, DenseF64ArrayAttr:$f64attr, @@ -307,7 +308,7 @@ def DenseArrayAttrOp : TEST_Op<"dense_array_attr"> { ); let assemblyFormat = [{ `i1attr` `=` $i1attr `i8attr` `=` $i8attr `i16attr` `=` $i16attr - `i32attr` `=` $i32attr `i64attr` `=` $i64attr `f32attr` `=` $f32attr + `i32attr` `=` $i32attr `ui32attr` `=` $ui32attr `i64attr` `=` $i64attr `f32attr` `=` $f32attr `f64attr` `=` $f64attr `emptyattr` `=` $emptyattr attr-dict }]; } @@ -320,6 +321,8 @@ def ConfinedDenseArrayAttrOp : TEST_Op<"confined_dense_array_attr"> { let arguments = (ins ConfinedAttr<DenseI16ArrayAttr, [DenseArrayStrictlySorted<DenseI16ArrayAttr>]>:$emptyattr, + ConfinedAttr<DenseUI32ArrayAttr, + [DenseArraySorted<DenseUI32ArrayAttr>]>:$ui32attr, ConfinedAttr<DenseI32ArrayAttr, [DenseArraySorted<DenseI32ArrayAttr>]>:$i32attr, ConfinedAttr<DenseI64ArrayAttr, @@ -334,6 +337,8 @@ def DenseArrayStrictlyPositiveAttrOp : TEST_Op<"confined_strictly_positive_attr" [DenseArrayStrictlyPositive<DenseI8ArrayAttr>]>:$i8attr, ConfinedAttr<DenseI16ArrayAttr, [DenseArrayStrictlyPositive<DenseI16ArrayAttr>]>:$i16attr, + ConfinedAttr<DenseUI32ArrayAttr, + [DenseArrayStrictlyPositive<DenseUI32ArrayAttr>]>:$ui32attr, ConfinedAttr<DenseI32ArrayAttr, [DenseArrayStrictlyPositive<DenseI32ArrayAttr>]>:$i32attr, ConfinedAttr<DenseI64ArrayAttr, @@ -347,7 +352,7 @@ def DenseArrayStrictlyPositiveAttrOp : TEST_Op<"confined_strictly_positive_attr" ); } -// It does not make sense to have this constraint on a DenseBoolArrayAttr. +// It does not make sense to have this constraint on a DenseBoolArrayAttr/DenseUI32ArrayAttr. // It is always true. def DenseArrayNonNegativeOp : TEST_Op<"confined_non_negative_attr"> { let arguments = (ins _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits