#pragma once #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/Value.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Support/LogicalResult.h" namespace onnx_mlir { struct StaticSubviewInfo { mlir::Value source; llvm::SmallVector sourceShape; llvm::SmallVector offsets; llvm::SmallVector sizes; llvm::SmallVector strides; }; mlir::Value stripMemRefCasts(mlir::Value value); mlir::Value stripMemRefViewOps(mlir::Value value); bool hasAllStaticSubviewParts(mlir::memref::SubViewOp subview); llvm::FailureOr getStaticSubviewInfo(mlir::Value value); /// Returns the offsets in `info` as int64_t, failing if any offset is dynamic. llvm::FailureOr> getStaticSubviewOffsets(const StaticSubviewInfo& info); } // namespace onnx_mlir