[Mlir-commits] [mlir] [mlir][Affine] Let affine.[de]linearize_index omit outer bounds (PR #116103)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Nov 13 20:28:06 PST 2024
================
@@ -1096,17 +1114,37 @@ def AffineDelinearizeIndexOp : Affine_Op<"delinearize_index",
}];
let builders = [
- OpBuilder<(ins "Value":$linear_index, "ValueRange":$basis)>,
- OpBuilder<(ins "Value":$linear_index, "ArrayRef<OpFoldResult>":$basis)>,
- OpBuilder<(ins "Value":$linear_index, "ArrayRef<int64_t>":$basis)>
+ OpBuilder<(ins "Value":$linear_index, "ValueRange":$dynamic_basis, "ArrayRef<int64_t>":$static_asis, CArg<"bool", "true">:$hasOuterBound)>,
+ OpBuilder<(ins "Value":$linear_index, "ValueRange":$basis, CArg<"bool", "true">:$hasOuterBound)>,
+ OpBuilder<(ins "Value":$linear_index, "ArrayRef<OpFoldResult>":$basis, CArg<"bool", "true">:$hasOuterBound)>,
+ OpBuilder<(ins "Value":$linear_index, "ArrayRef<int64_t>":$basis, CArg<"bool", "true">:$hasOuterBound)>
];
let extraClassDeclaration = [{
+ /// Return true if the basis includes a bound on the first index input.
+ bool hasOuterBound() {
+ return getMultiIndex().size() == getStaticBasis().size();
+ }
+
/// Returns a vector with all the static and dynamic basis values.
SmallVector<OpFoldResult> getMixedBasis() {
OpBuilder builder(getContext());
return ::mlir::getMixedValues(getStaticBasis(), getDynamicBasis(), builder);
}
+
+ /// Return a vector that contains the basis of the operation, removing
+ /// the outer bound if one is present.
+ SmallVector<OpFoldResult> getEffectiveBasis() {
+ OpBuilder builder(getContext());
+ if (hasOuterBound()) {
+ if (getStaticBasis().front() == ::mlir::ShapedType::kDynamic)
----------------
MaheshRavishankar wrote:
Why this check? Also not good to have c++ code in tablegen file.
https://github.com/llvm/llvm-project/pull/116103
More information about the Mlir-commits
mailing list