MLIR
20.0.0git
|
Classes | |
class | TransformDialectDataBase |
Concrete base class for CRTP TransformDialectDataBase. More... | |
Functions | |
LogicalResult | verifyStructuredOpPredicateOpTrait (Operation *op, Value structuredOpHandle) |
template<typename OpTy > | |
DiagnosedSilenceableFailure | matchOptionalOperation (OpTy op, TransformResults &results, TransformState &state) |
Dispatch matchOperation based on Operation* or std::optional<Operation*> first operand. More... | |
LogicalResult | mapPossibleTopLevelTransformOpBlockArguments (TransformState &state, Operation *op, Region ®ion) |
Maps the only block argument of the op with PossibleTopLevelTransformOpTrait to either the list of operations associated with its operand or the root of the payload IR, depending on what is available in the context. More... | |
LogicalResult | verifyPossibleTopLevelTransformOpTrait (Operation *op) |
Verification hook for PossibleTopLevelTransformOpTrait. More... | |
void | getPotentialTopLevelEffects (Operation *operation, Value root, Block &body, SmallVectorImpl< MemoryEffects::EffectInstance > &effects) |
Populates effects with side effects implied by PossibleTopLevelTransformOpTrait for the given operation. More... | |
LogicalResult | verifyTransformOpInterface (Operation *op) |
Verification hook for TransformOpInterface. More... | |
LogicalResult | appendValueMappings (MutableArrayRef< SmallVector< transform::MappedValue >> mappings, ValueRange values, const transform::TransformState &state, bool flatten=true) |
Appends the entities associated with the given transform values in state to the pre-existing list of mappings. More... | |
void | prepareValueMappings (SmallVectorImpl< SmallVector< transform::MappedValue >> &mappings, ValueRange values, const transform::TransformState &state) |
Populates mappings with mapped values associated with the given transform IR values in the given state . More... | |
void | forwardTerminatorOperands (Block *block, transform::TransformState &state, transform::TransformResults &results) |
Populates results with payload associations that match exactly those of the operands to block 's terminator. More... | |
TransformState | makeTransformStateForTesting (Region *region, Operation *payloadRoot) |
Make a dummy transform state for testing purposes. More... | |
SmallVector< OpOperand * > | getConsumedHandleOpOperands (transform::TransformOpInterface transformOp) |
Returns all operands that are handles and being consumed by the given op. More... | |
void | getParamProducerTransformOpTraitEffects (Operation *op, SmallVectorImpl< MemoryEffects::EffectInstance > &effects) |
Non-template implementation of ParamProducerTransformOpTrait::getEffects(). More... | |
LogicalResult | verifyParamProducerTransformOpTrait (Operation *op) |
Non-template implementation of ParamProducerTransformOpTrait::verify(). More... | |
LogicalResult | checkApplyToOne (Operation *transformOp, Location payloadOpLoc, const ApplyToEachResultList &partialResult) |
Check that the contents of partialResult matches the number, kind (payload op or parameter) and nullity (either all or none) requirements of transformOp . More... | |
void | setApplyToOneResults (Operation *transformOp, TransformResults &transformResults, ArrayRef< ApplyToEachResultList > results) |
"Transpose" the results produced by individual applications, arranging them per result value of the transform op, and populate transformResults with that. More... | |
template<typename TransformOpTy , typename Range > | |
DiagnosedSilenceableFailure | applyTransformToEach (TransformOpTy transformOp, TransformRewriter &rewriter, Range &&targets, SmallVectorImpl< ApplyToEachResultList > &results, TransformState &state) |
Applies a one-to-one or a one-to-many transform to each of the given targets. More... | |
LogicalResult | checkNestedConsumption (Location loc, ArrayRef< Operation * > targets) |
Reports an error and returns failure if targets contains an ancestor operation before its descendant (or a copy of itself). More... | |
void | checkImplementsTransformOpInterface (StringRef name, MLIRContext *context) |
Asserts that the operations provided as template arguments implement the TransformOpInterface and MemoryEffectsOpInterface. More... | |
void | checkImplementsTransformHandleTypeInterface (TypeID typeID, MLIRContext *context) |
Asserts that the type provided as template argument implements the TransformHandleTypeInterface. More... | |
InFlightDiagnostic | mergeSymbolsInto (Operation *target, OwningOpRef< Operation * > other) |
Merge all symbols from other into target . More... | |
LogicalResult | expandPathsToMLIRFiles (ArrayRef< std::string > paths, MLIRContext *context, SmallVectorImpl< std::string > &fileNames) |
Expands the given list of paths to a list of .mlir files. More... | |
LogicalResult | parseTransformModuleFromFile (MLIRContext *context, llvm::StringRef transformFileName, OwningOpRef< ModuleOp > &transformModule) |
Utility to parse and verify the content of a transformFileName MLIR file containing a transform dialect specification. More... | |
LogicalResult | assembleTransformLibraryFromPaths (MLIRContext *context, ArrayRef< std::string > transformLibraryPaths, OwningOpRef< ModuleOp > &transformModule) |
Utility to parse, verify, aggregate and link the content of all mlir files nested under transformLibraryPaths and containing transform dialect specifications. More... | |
ModuleOp | getPreloadedTransformModule (MLIRContext *context) |
Utility to load a transform interpreter module from a module that has already been preloaded in the context. More... | |
TransformOpInterface | findTransformEntryPoint (Operation *root, ModuleOp module, StringRef entryPoint=TransformDialect::kTransformEntryPointSymbolName) |
Finds the first TransformOpInterface named kTransformEntryPointSymbolName that is either: More... | |
LogicalResult mlir::transform::detail::appendValueMappings | ( | MutableArrayRef< SmallVector< transform::MappedValue >> | mappings, |
ValueRange | values, | ||
const transform::TransformState & | state, | ||
bool | flatten = true |
||
) |
Appends the entities associated with the given transform values in state
to the pre-existing list of mappings.
The array of mappings must have as many elements as values. If flatten
is set, multiple values may be associated with each transform value, and this always succeeds. Otherwise, checks that each value has exactly one mapping associated and return failure otherwise.
Definition at line 1537 of file TransformInterfaces.cpp.
DiagnosedSilenceableFailure mlir::transform::detail::applyTransformToEach | ( | TransformOpTy | transformOp, |
TransformRewriter & | rewriter, | ||
Range && | targets, | ||
SmallVectorImpl< ApplyToEachResultList > & | results, | ||
TransformState & | state | ||
) |
Applies a one-to-one or a one-to-many transform to each of the given targets.
Puts the results of transforms, if any, in results
in the same order. Fails if any of the application fails. Individual transforms must be callable with the following signature:
targets
contains operations of the same class and a silenceable failure is reported if it does not. Definition at line 1486 of file TransformInterfaces.h.
LogicalResult mlir::transform::detail::assembleTransformLibraryFromPaths | ( | MLIRContext * | context, |
ArrayRef< std::string > | transformLibraryPaths, | ||
OwningOpRef< ModuleOp > & | transformModule | ||
) |
Utility to parse, verify, aggregate and link the content of all mlir files nested under transformLibraryPaths
and containing transform dialect specifications.
Definition at line 152 of file TransformInterpreterUtils.cpp.
References expandPathsToMLIRFiles(), mlir::OwningOpRef< OpTy >::get(), mlir::get(), mlir::FileLineColLoc::get(), mergeSymbolsInto(), and parseTransformModuleFromFile().
LogicalResult mlir::transform::detail::checkApplyToOne | ( | Operation * | transformOp, |
Location | payloadOpLoc, | ||
const ApplyToEachResultList & | partialResult | ||
) |
Check that the contents of partialResult
matches the number, kind (payload op or parameter) and nullity (either all or none) requirements of transformOp
.
Report errors and return failure otherwise.
Definition at line 1447 of file TransformInterfaces.cpp.
References diag(), emitDiag(), mlir::emitError(), mlir::Operation::getLoc(), mlir::Operation::getName(), mlir::Operation::getNumResults(), mlir::Operation::getResults(), mlir::OperationName::getStringRef(), and mlir::transform::ApplyToEachResultList::size().
void mlir::transform::detail::checkImplementsTransformHandleTypeInterface | ( | TypeID | typeID, |
MLIRContext * | context | ||
) |
Asserts that the type provided as template argument implements the TransformHandleTypeInterface.
This must be a dynamic assertion since interface implementations may be registered at runtime.
Definition at line 47 of file TransformDialect.cpp.
References mlir::AbstractType::lookup().
void mlir::transform::detail::checkImplementsTransformOpInterface | ( | StringRef | name, |
MLIRContext * | context | ||
) |
Asserts that the operations provided as template arguments implement the TransformOpInterface and MemoryEffectsOpInterface.
This must be a dynamic assertion since interface implementations may be registered at runtime.
Definition at line 23 of file TransformDialect.cpp.
References mlir::OperationName::hasInterface(), mlir::OperationName::hasTrait(), and mlir::RegisteredOperationName::lookup().
LogicalResult mlir::transform::detail::checkNestedConsumption | ( | Location | loc, |
ArrayRef< Operation * > | targets | ||
) |
Reports an error and returns failure if targets
contains an ancestor operation before its descendant (or a copy of itself).
Implementation detail for expensive checks during TransformEachOpTrait::apply
.
Definition at line 1425 of file TransformInterfaces.cpp.
References diag(), mlir::emitError(), and mlir::detail::enumerate().
LogicalResult mlir::transform::detail::expandPathsToMLIRFiles | ( | ArrayRef< std::string > | paths, |
MLIRContext * | context, | ||
SmallVectorImpl< std::string > & | fileNames | ||
) |
Expands the given list of paths
to a list of .mlir
files.
Each entry in paths
may either be a regular file, in which case it ends up in the result list, or a directory, in which case all (regular) .mlir
files in that directory are added. Any other file types lead to a failure.
Definition at line 41 of file TransformInterpreterUtils.cpp.
References DBGS, mlir::emitError(), and mlir::FileLineColLoc::get().
Referenced by assembleTransformLibraryFromPaths().
transform::TransformOpInterface mlir::transform::detail::findTransformEntryPoint | ( | Operation * | root, |
ModuleOp | module, | ||
StringRef | entryPoint = TransformDialect::kTransformEntryPointSymbolName |
||
) |
Finds the first TransformOpInterface named kTransformEntryPointSymbolName
that is either:
root
(takes precedence).module
, if not found in root
. Reports errors and returns null if no such operation found. Definition at line 127 of file TransformInterpreterUtils.cpp.
References mlir::WalkResult::advance(), diag(), mlir::Operation::emitError(), mlir::WalkResult::interrupt(), mlir::PreOrder, and mlir::Operation::walk().
void mlir::transform::detail::forwardTerminatorOperands | ( | Block * | block, |
transform::TransformState & | state, | ||
transform::TransformResults & | results | ||
) |
Populates results
with payload associations that match exactly those of the operands to block
's terminator.
Definition at line 1570 of file TransformInterfaces.cpp.
SmallVector<OpOperand *> mlir::transform::detail::getConsumedHandleOpOperands | ( | transform::TransformOpInterface | transformOp | ) |
Returns all operands that are handles and being consumed by the given op.
void mlir::transform::detail::getParamProducerTransformOpTraitEffects | ( | Operation * | op, |
SmallVectorImpl< MemoryEffects::EffectInstance > & | effects | ||
) |
Non-template implementation of ParamProducerTransformOpTrait::getEffects().
Definition at line 1758 of file TransformInterfaces.cpp.
References mlir::Operation::getOpOperands(), mlir::Operation::getResults(), mlir::transform::onlyReadsHandle(), mlir::transform::onlyReadsPayload(), and mlir::transform::producesHandle().
Referenced by mlir::transform::ParamProducerTransformOpTrait< OpTy >::getEffects().
void mlir::transform::detail::getPotentialTopLevelEffects | ( | Operation * | operation, |
Value | root, | ||
Block & | body, | ||
SmallVectorImpl< MemoryEffects::EffectInstance > & | effects | ||
) |
Populates effects
with side effects implied by PossibleTopLevelTransformOpTrait for the given operation.
The operation may have an optional root
operand, indicating it is not in fact top-level. It is also expected to have a single-block body.
Definition at line 1633 of file TransformInterfaces.cpp.
References mlir::Operation::getOpOperands(), mlir::Operation::getOpResults(), mlir::transform::onlyReadsHandle(), mlir::transform::producesHandle(), and remapArgumentEffects().
Referenced by mlir::transform::PossibleTopLevelTransformOpTrait< OpTy >::getPotentialTopLevelEffects().
ModuleOp mlir::transform::detail::getPreloadedTransformModule | ( | MLIRContext * | context | ) |
Utility to load a transform interpreter module
from a module that has already been preloaded in the context.
This mode is useful in cases where explicit parsing of a transform library from file is expected to be prohibitively expensive. In such cases, the transform module is expected to be found in the preloaded library modules of the transform dialect. Returns null if the module is not found.
Definition at line 121 of file TransformInterpreterUtils.cpp.
References mlir::MLIRContext::getOrLoadDialect().
transform::TransformState mlir::transform::detail::makeTransformStateForTesting | ( | Region * | region, |
Operation * | payloadRoot | ||
) |
Make a dummy transform state for testing purposes.
This MUST NOT be used outside of test cases.
Definition at line 1591 of file TransformInterfaces.cpp.
LogicalResult mlir::transform::detail::mapPossibleTopLevelTransformOpBlockArguments | ( | TransformState & | state, |
Operation * | op, | ||
Region & | region | ||
) |
Maps the only block argument of the op with PossibleTopLevelTransformOpTrait to either the list of operations associated with its operand or the root of the payload IR, depending on what is available in the context.
Definition at line 1656 of file TransformInterfaces.cpp.
DiagnosedSilenceableFailure mlir::transform::detail::matchOptionalOperation | ( | OpTy | op, |
TransformResults & | results, | ||
TransformState & | state | ||
) |
Dispatch matchOperation
based on Operation* or std::optional<Operation*> first operand.
Definition at line 27 of file MatchInterfaces.h.
InFlightDiagnostic mlir::transform::detail::mergeSymbolsInto | ( | Operation * | target, |
OwningOpRef< Operation * > | other | ||
) |
Merge all symbols from other
into target
.
Both ops need to implement the SymbolTable
trait. Operations are moved from other
, i.e., other
may be modified by this function and might not verify after the function returns. Upon merging, private symbols may be renamed in order to avoid collisions in the result. Public symbols may not collide, with the exception of instances of SymbolOpInterface
, where collisions are allowed if at least one of the two is external, in which case the other op preserved (or any one of the two if both are external).
Definition at line 79 of file Utils.cpp.
References canMergeInto(), DBGS, diag(), mlir::Operation::emitError(), mlir::Block::end(), mlir::Region::front(), mlir::Operation::getRegion(), mlir::Operation::hasTrait(), mlir::SymbolTable::insert(), mlir::SymbolTable::lookup(), mergeInto(), mlir::SymbolTable::remove(), and mlir::verify().
Referenced by mlir::transform::applyTransformNamedSequence(), assembleTransformLibraryFromPaths(), and mlirMergeSymbolsIntoFromClone().
LogicalResult mlir::transform::detail::parseTransformModuleFromFile | ( | MLIRContext * | context, |
llvm::StringRef | transformFileName, | ||
OwningOpRef< ModuleOp > & | transformModule | ||
) |
Utility to parse and verify the content of a transformFileName
MLIR file containing a transform dialect specification.
Definition at line 90 of file TransformInterpreterUtils.cpp.
References DBGS, mlir::emitError(), mlir::get(), mlir::FileLineColLoc::get(), mlir::openInputFile(), and mlir::verify().
Referenced by assembleTransformLibraryFromPaths().
void mlir::transform::detail::prepareValueMappings | ( | SmallVectorImpl< SmallVector< transform::MappedValue >> & | mappings, |
ValueRange | values, | ||
const transform::TransformState & | state | ||
) |
Populates mappings
with mapped values associated with the given transform IR values in the given state
.
Definition at line 1560 of file TransformInterfaces.cpp.
void mlir::transform::detail::setApplyToOneResults | ( | Operation * | transformOp, |
TransformResults & | transformResults, | ||
ArrayRef< ApplyToEachResultList > | results | ||
) |
"Transpose" the results produced by individual applications, arranging them per result value of the transform op, and populate transformResults
with that.
The number, kind and nullity of per-application results are assumed to have been verified.
Definition at line 1505 of file TransformInterfaces.cpp.
References mlir::detail::enumerate(), and mlir::Operation::getNumResults().
LogicalResult mlir::transform::detail::verifyParamProducerTransformOpTrait | ( | Operation * | op | ) |
Non-template implementation of ParamProducerTransformOpTrait::verify().
Definition at line 1773 of file TransformInterfaces.cpp.
References mlir::Operation::emitOpError(), mlir::OperationName::getInterface(), mlir::Operation::getName(), mlir::Operation::getResults(), and mlir::OperationName::getStringRef().
Referenced by mlir::transform::ParamProducerTransformOpTrait< OpTy >::verifyTrait().
LogicalResult mlir::transform::detail::verifyPossibleTopLevelTransformOpTrait | ( | Operation * | op | ) |
Verification hook for PossibleTopLevelTransformOpTrait.
Definition at line 1691 of file TransformInterfaces.cpp.
References diag(), mlir::Operation::emitOpError(), mlir::Region::front(), mlir::BlockArgument::getArgNumber(), mlir::Block::getArgument(), mlir::Block::getArguments(), mlir::Block::getNumArguments(), mlir::Operation::getNumOperands(), mlir::Operation::getNumRegions(), mlir::Operation::getOperand(), mlir::Operation::getParentWithTrait(), mlir::Operation::getRegion(), and mlir::Value::getType().
Referenced by mlir::transform::applyTransforms(), and mlir::transform::PossibleTopLevelTransformOpTrait< OpTy >::verifyTrait().
LogicalResult mlir::transform::detail::verifyStructuredOpPredicateOpTrait | ( | Operation * | op, |
Value | structuredOpHandle | ||
) |
Definition at line 146 of file LinalgMatchOps.cpp.
References mlir::Operation::emitOpError(), mlir::Region::empty(), mlir::Region::front(), mlir::Block::getArgument(), mlir::Block::getNumArguments(), mlir::Operation::getNumRegions(), mlir::Operation::getParentOp(), and mlir::Operation::getRegion().
Referenced by mlir::transform::StructuredOpPredicateOpTrait< OpTy >::verifyTrait().
LogicalResult mlir::transform::detail::verifyTransformOpInterface | ( | Operation * | op | ) |
Verification hook for TransformOpInterface.
Definition at line 1930 of file TransformInterfaces.cpp.
References diag(), mlir::Operation::emitError(), mlir::Operation::getOpOperands(), mlir::Operation::getResults(), and mlir::SideEffects::EffectInstance< EffectT >::getValue().