MLIR  17.0.0git
Macros | Typedefs | Functions
LinalgOps.cpp File Reference
#include "mlir/Dialect/Linalg/IR/Linalg.h"
#include "mlir/AsmParser/AsmParser.h"
#include "mlir/Dialect/Affine/IR/AffineOps.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Arith/Utils/Utils.h"
#include "mlir/Dialect/Complex/IR/Complex.h"
#include "mlir/Dialect/Math/IR/Math.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/SCF/IR/SCF.h"
#include "mlir/Dialect/SparseTensor/IR/SparseTensor.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/Dialect/Utils/IndexingUtils.h"
#include "mlir/Dialect/Utils/ReshapeOpsUtils.h"
#include "mlir/Dialect/Utils/StaticValueUtils.h"
#include "mlir/IR/AffineExprVisitor.h"
#include "mlir/IR/AffineMap.h"
#include "mlir/IR/BuiltinAttributes.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/OpImplementation.h"
#include "mlir/IR/OperationSupport.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/Interfaces/InferTypeOpInterface.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include <optional>
#include "mlir/Dialect/Linalg/IR/LinalgNamedStructuredOps.yamlgen.cpp.inc"
#include "mlir/Dialect/Linalg/IR/LinalgOps.cpp.inc"
#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"

Go to the source code of this file.

Macros

#define GET_OP_CLASSES
 
#define GET_OP_CLASSES
 

Typedefs

using RegionBuilderFn = llvm::function_ref< void(ImplicitLocOpBuilder &, Block &, ArrayRef< NamedAttribute >)>
 

Functions

static void fillStructuredOpRegion (OpBuilder &opBuilder, Region &region, TypeRange inputTypes, TypeRange outputTypes, ArrayRef< NamedAttribute > attrs, RegionBuilderFn regionBuilder)
 Fills the region of a structured operation using the provided regionBuilder. More...
 
static void buildStructuredOp (OpBuilder &b, OperationState &state, std::optional< TypeRange > resultTensorTypes, ValueRange inputs, ValueRange outputs, ArrayRef< NamedAttribute > attributes, RegionBuilderFn regionBuilder)
 Creates a structured operation given inputs, outputs, and attributes. More...
 
static ParseResult parseCommonStructuredOpParts (OpAsmParser &parser, OperationState &result, SmallVectorImpl< Type > &inputTypes, SmallVectorImpl< Type > &outputTypes, bool addOperandSegmentSizes=true)
 Common parsing used for both named structured ops created by ods-gen and by manually defined C++ ops. More...
 
static void printCommonStructuredOpParts (OpAsmPrinter &p, ValueRange inputs, ValueRange outputs)
 
static ParseResult parseNamedStructuredOpRegion (OpAsmParser &parser, Region &region, unsigned numRegionArgs, TypeRange inputTypes, TypeRange outputTypes, ArrayRef< NamedAttribute > attrs, RegionBuilderFn regionBuilder)
 
static ParseResult parseNamedStructuredOpResults (OpAsmParser &parser, SmallVectorImpl< Type > &resultTypes)
 
static ParseResult parseNamedStructuredOp (OpAsmParser &parser, OperationState &result, unsigned numRegionArgs, RegionBuilderFn regionBuilder)
 
static void printNamedStructuredOpResults (OpAsmPrinter &p, TypeRange resultTypes)
 
static void printNamedStructuredOp (OpAsmPrinter &p, Operation *op, ValueRange inputs, ValueRange outputs)
 
static void buildGenericRegion (OpBuilder &builder, Location loc, Region &region, ValueRange inputs, ValueRange outputs, function_ref< void(OpBuilder &, Location, ValueRange)> bodyBuild)
 
static void getGenericEffectsImpl (SmallVectorImpl< SideEffects::EffectInstance< MemoryEffects::Effect >> &effects, ValueRange results, const OpOperandVector &inputOperands, const OpOperandVector &outputOperands)
 
static ParseResult parseDstStyleOp (OpAsmParser &parser, OperationState &result, function_ref< ParseResult(OpAsmParser &, NamedAttrList &)> parseAttrsFn=nullptr)
 
static void addBodyWithPayloadOp (OpAsmParser &parser, OperationState &result, const OperationName &payloadOpName, const NamedAttrList &payloadOpAttrs, ArrayRef< Value > operands, bool initFirst=false)
 
static OperationfindPayloadOp (Block *body, bool initFirst=false)
 
void printShortForm (OpAsmPrinter &p, Operation *payloadOp)
 
static ParseResult parseDenseI64ArrayAttr (OpAsmParser &parser, NamedAttrList &attributes, StringRef attributeName)
 
static void printDenseI64ArrayAttr (OpAsmPrinter &p, StringRef attributeName, ArrayRef< int64_t > attributeValue)
 
static void buildIdentityRegion (OpBuilder &builder, Location loc, Region &region, ValueRange inputs, ValueRange outputs)
 
static LogicalResult verifyYield (linalg::YieldOp op, LinalgOp linalgOp)
 
static LogicalResult appendMangledType (llvm::raw_string_ostream &ss, Type t)
 

Macro Definition Documentation

◆ GET_OP_CLASSES [1/2]

#define GET_OP_CLASSES

Definition at line 1811 of file LinalgOps.cpp.

◆ GET_OP_CLASSES [2/2]

#define GET_OP_CLASSES

Definition at line 1811 of file LinalgOps.cpp.

Typedef Documentation

◆ RegionBuilderFn

Definition at line 53 of file LinalgOps.cpp.

Function Documentation

◆ addBodyWithPayloadOp()

static void addBodyWithPayloadOp ( OpAsmParser parser,
OperationState result,
const OperationName payloadOpName,
const NamedAttrList payloadOpAttrs,
ArrayRef< Value operands,
bool  initFirst = false 
)
static

◆ appendMangledType()

static LogicalResult appendMangledType ( llvm::raw_string_ostream &  ss,
Type  t 
)
static

◆ buildGenericRegion()

static void buildGenericRegion ( OpBuilder builder,
Location  loc,
Region region,
ValueRange  inputs,
ValueRange  outputs,
function_ref< void(OpBuilder &, Location, ValueRange)>  bodyBuild 
)
static

◆ buildIdentityRegion()

static void buildIdentityRegion ( OpBuilder builder,
Location  loc,
Region region,
ValueRange  inputs,
ValueRange  outputs 
)
static

Definition at line 1491 of file LinalgOps.cpp.

References buildGenericRegion(), and mlir::OpBuilder::create().

◆ buildStructuredOp()

static void buildStructuredOp ( OpBuilder b,
OperationState state,
std::optional< TypeRange resultTensorTypes,
ValueRange  inputs,
ValueRange  outputs,
ArrayRef< NamedAttribute attributes,
RegionBuilderFn  regionBuilder 
)
static

Creates a structured operation given inputs, outputs, and attributes.

The result types are derived automatically if resultTensorTypes is none. The body of the operation is filled using regionBuilder. All ods-gen created structured operations use the method to implement their builders.

Definition at line 100 of file LinalgOps.cpp.

References mlir::OperationState::addAttribute(), mlir::OperationState::addAttributes(), mlir::OperationState::addOperands(), mlir::OperationState::addRegion(), mlir::OperationState::addTypes(), mlir::OperationState::attributes, fillStructuredOpRegion(), mlir::NamedAttrList::getAttrs(), mlir::Builder::getDenseI32ArrayAttr(), and mlir::ValueRange::getTypes().

◆ fillStructuredOpRegion()

static void fillStructuredOpRegion ( OpBuilder opBuilder,
Region region,
TypeRange  inputTypes,
TypeRange  outputTypes,
ArrayRef< NamedAttribute attrs,
RegionBuilderFn  regionBuilder 
)
static

Fills the region of a structured operation using the provided regionBuilder.

The method is used by both named structured ops created by ods-gen and by manually defined C++ ops. It is called by both builders and parsers and creates a block with arguments corresponding to the elemental types of inputTypes and outputTypes. All output types are asserted to be ShapedType.

Definition at line 62 of file LinalgOps.cpp.

References mlir::OpBuilder::createBlock(), mlir::getElementTypeOrSelf(), mlir::Builder::getUnknownLoc(), and mlir::OpBuilder::setInsertionPointToStart().

Referenced by buildStructuredOp(), and parseNamedStructuredOpRegion().

◆ findPayloadOp()

static Operation* findPayloadOp ( Block body,
bool  initFirst = false 
)
static

◆ getGenericEffectsImpl()

static void getGenericEffectsImpl ( SmallVectorImpl< SideEffects::EffectInstance< MemoryEffects::Effect >> &  effects,
ValueRange  results,
const OpOperandVector inputOperands,
const OpOperandVector outputOperands 
)
static

◆ parseCommonStructuredOpParts()

static ParseResult parseCommonStructuredOpParts ( OpAsmParser parser,
OperationState result,
SmallVectorImpl< Type > &  inputTypes,
SmallVectorImpl< Type > &  outputTypes,
bool  addOperandSegmentSizes = true 
)
static

◆ parseDenseI64ArrayAttr()

static ParseResult parseDenseI64ArrayAttr ( OpAsmParser parser,
NamedAttrList attributes,
StringRef  attributeName 
)
static

◆ parseDstStyleOp()

static ParseResult parseDstStyleOp ( OpAsmParser parser,
OperationState result,
function_ref< ParseResult(OpAsmParser &, NamedAttrList &)>  parseAttrsFn = nullptr 
)
static

◆ parseNamedStructuredOp()

static ParseResult parseNamedStructuredOp ( OpAsmParser parser,
OperationState result,
unsigned  numRegionArgs,
RegionBuilderFn  regionBuilder 
)
static

◆ parseNamedStructuredOpRegion()

static ParseResult parseNamedStructuredOpRegion ( OpAsmParser parser,
Region region,
unsigned  numRegionArgs,
TypeRange  inputTypes,
TypeRange  outputTypes,
ArrayRef< NamedAttribute attrs,
RegionBuilderFn  regionBuilder 
)
static

◆ parseNamedStructuredOpResults()

static ParseResult parseNamedStructuredOpResults ( OpAsmParser parser,
SmallVectorImpl< Type > &  resultTypes 
)
static

◆ printCommonStructuredOpParts()

static void printCommonStructuredOpParts ( OpAsmPrinter p,
ValueRange  inputs,
ValueRange  outputs 
)
static

Definition at line 204 of file LinalgOps.cpp.

References mlir::ValueRange::getTypes().

◆ printDenseI64ArrayAttr()

static void printDenseI64ArrayAttr ( OpAsmPrinter p,
StringRef  attributeName,
ArrayRef< int64_t >  attributeValue 
)
static

Definition at line 1370 of file LinalgOps.cpp.

◆ printNamedStructuredOp()

static void printNamedStructuredOp ( OpAsmPrinter p,
Operation op,
ValueRange  inputs,
ValueRange  outputs 
)
static

Definition at line 275 of file LinalgOps.cpp.

◆ printNamedStructuredOpResults()

static void printNamedStructuredOpResults ( OpAsmPrinter p,
TypeRange  resultTypes 
)
static

Definition at line 268 of file LinalgOps.cpp.

References mlir::AsmPrinter::printOptionalArrowTypeList().

◆ printShortForm()

void printShortForm ( OpAsmPrinter p,
Operation payloadOp 
)

◆ verifyYield()

static LogicalResult verifyYield ( linalg::YieldOp  op,
LinalgOp  linalgOp 
)
static

Definition at line 1757 of file LinalgOps.cpp.