18 #include "mlir/Interfaces/ViewLikeInterface.cpp.inc"
26 if (staticVals.size() != numElements)
28 << numElements <<
" " << name <<
" values";
29 unsigned expectedNumDynamicEntries =
30 llvm::count_if(staticVals, [&](int64_t staticVal) {
31 return ShapedType::isDynamic(staticVal);
33 if (values.size() != expectedNumDynamicEntries)
35 << expectedNumDynamicEntries <<
" dynamic " << name <<
" values";
41 std::array<unsigned, 3> maxRanks = op.getArrayAttrMaxRanks();
46 if (!(op.getMixedOffsets().size() == 1 && maxRanks[0] == 1) &&
47 op.getMixedOffsets().size() != op.getMixedSizes().size())
49 "expected mixed offsets rank to match mixed sizes rank (")
50 << op.getMixedOffsets().size() <<
" vs " << op.getMixedSizes().size()
51 <<
") so the rank of the result type is well-formed.";
54 if (op.getMixedSizes().size() != op.getMixedStrides().size())
56 "expected mixed sizes rank to match mixed strides rank (")
57 << op.getMixedSizes().size() <<
" vs " << op.getMixedStrides().size()
58 <<
") so the rank of the result type is well-formed.";
61 op.static_offsets(), op.offsets())))
64 op.static_sizes(), op.sizes())))
67 op.static_strides(), op.strides())))
76 if (integers.empty()) {
81 llvm::interleaveComma(integers, printer, [&](int64_t integer) {
82 if (ShapedType::isDynamic(integer))
83 printer << values[idx++];
96 auto parseIntegerOrValue = [&]() {
99 if (res.has_value() &&
succeeded(res.value())) {
100 values.push_back(operand);
101 integerVals.push_back(ShapedType::kDynamic);
106 integerVals.push_back(integer);
112 " in dynamic index list"))
114 <<
"expected SSA value or integer";
120 OffsetSizeAndStrideOpInterface a, OffsetSizeAndStrideOpInterface b,
122 if (a.static_offsets().size() != b.static_offsets().size())
124 if (a.static_sizes().size() != b.static_sizes().size())
126 if (a.static_strides().size() != b.static_strides().size())
128 for (
auto it : llvm::zip(a.getMixedOffsets(), b.getMixedOffsets()))
129 if (!cmp(std::get<0>(it), std::get<1>(it)))
131 for (
auto it : llvm::zip(a.getMixedSizes(), b.getMixedSizes()))
132 if (!cmp(std::get<0>(it), std::get<1>(it)))
134 for (
auto it : llvm::zip(a.getMixedStrides(), b.getMixedStrides()))
135 if (!cmp(std::get<0>(it), std::get<1>(it)))
@ Square
Square brackets surrounding zero or more operands.
virtual ParseResult parseCommaSeparatedList(Delimiter delimiter, function_ref< ParseResult()> parseElementFn, StringRef contextMessage=StringRef())=0
Parse a list of comma-separated items with an optional delimiter.
virtual Builder & getBuilder() const =0
Return a builder which provides useful access to MLIRContext, global objects like types and attribute...
virtual InFlightDiagnostic emitError(SMLoc loc, const Twine &message={})=0
Emit a diagnostic at the specified location and return failure.
ParseResult parseInteger(IntT &result)
Parse an integer value from the stream.
virtual SMLoc getNameLoc() const =0
Return the location of the original name token.
DenseI64ArrayAttr getDenseI64ArrayAttr(ArrayRef< int64_t > values)
The OpAsmParser has methods for interacting with the asm parser: parsing things from it,...
virtual OptionalParseResult parseOptionalOperand(UnresolvedOperand &result, bool allowResultNumber=true)=0
Parse a single operand if present.
This is a pure-virtual base class that exposes the asmprinter hooks necessary to implement a custom p...
This class represents a single result from folding an operation.
This class implements the operand iterators for the Operation class.
Operation is the basic unit of execution within MLIR.
InFlightDiagnostic emitError(const Twine &message={})
Emit an error about fatal conditions with this operation, reporting up to any diagnostic handlers tha...
This class represents success/failure for parsing-like operations that find it important to chain tog...
This class provides an abstraction over the different types of ranges over Values.
Base class for DenseArrayAttr that is instantiated and specialized for each supported element type be...
bool sameOffsetsSizesAndStrides(OffsetSizeAndStrideOpInterface a, OffsetSizeAndStrideOpInterface b, llvm::function_ref< bool(OpFoldResult, OpFoldResult)> cmp)
LogicalResult verifyOffsetSizeAndStrideOp(OffsetSizeAndStrideOpInterface op)
Include the generated interface declarations.
LogicalResult failure(bool isFailure=true)
Utility function to generate a LogicalResult.
void printDynamicIndexList(OpAsmPrinter &printer, Operation *op, OperandRange values, ArrayRef< int64_t > integers)
Printer hook for custom directive in assemblyFormat.
bool succeeded(LogicalResult result)
Utility function that returns true if the provided LogicalResult corresponds to a success value.
LogicalResult success(bool isSuccess=true)
Utility function to generate a LogicalResult.
ParseResult parseDynamicIndexList(OpAsmParser &parser, SmallVectorImpl< OpAsmParser::UnresolvedOperand > &values, DenseI64ArrayAttr &integers)
Pasrer hook for custom directive in assemblyFormat.
LogicalResult verifyListOfOperandsOrIntegers(Operation *op, StringRef name, unsigned expectedNumElements, ArrayRef< int64_t > attr, ValueRange values)
Verify that a the values has as many elements as the number of entries in attr for which isDynamic ev...
bool failed(LogicalResult result)
Utility function that returns true if the provided LogicalResult corresponds to a failure value.
This class represents an efficient way to signal success or failure.
This is the representation of an operand reference.