//===-- ValueBoundsOpInterface.td - Value Bounds -----------*- tablegen -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef VALUEBOUNDSOPINTERFACE
#define VALUEBOUNDSOPINTERFACE
include "mlir/IR/OpBase.td"
def ValueBoundsOpInterface : OpInterface<"ValueBoundsOpInterface"> {
let description = [{
This interface allows operations with index-typed and/or shaped value-typed
results/block arguments to specify range bounds. These bounds are stored in
a constraint set. The constraint set can then be queried to compute bounds
in terms of other values that are stored in the constraint set.
}];
let cppNamespace = "::mlir";
let methods = [
InterfaceMethod<
/*desc=*/[{
Populate the constraint set with bounds for the given index-typed
value.
Note: If `value` is a block argument, it must belong to an entry block
of a region. Unstructured control flow graphs are not supported at the
moment.
}],
/*retType=*/"void",
/*methodName=*/"populateBoundsForIndexValue",
/*args=*/(ins "::mlir::Value":$value,
"::mlir::ValueBoundsConstraintSet &":$cstr),
/*methodBody=*/"",
/*defaultImplementation=*/[{
llvm_unreachable("not implemented");
}]
>,
InterfaceMethod<
/*desc=*/[{
Populate the constraint set with bounds for the size of the specified
dimension of the given shaped value.
Note: If `value` is a block argument, it must belong to an entry block
of a region. Unstructured control flow graphs are not supported at the
moment.
}],
/*retType=*/"void",
/*methodName=*/"populateBoundsForShapedValueDim",
/*args=*/(ins "::mlir::Value":$value,
"int64_t":$dim,
"::mlir::ValueBoundsConstraintSet &":$cstr),
/*methodBody=*/"",
/*defaultImplementation=*/[{
llvm_unreachable("not implemented");
}]
>,
];
}
#endif // VALUEBOUNDSOPINTERFACE